From b03768f915b4e975c92aa54e2270c364a04ca03b Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 23 Apr 2026 19:25:30 +0800 Subject: [PATCH 01/12] feat: Upgrade abp framework to 10.2.0 --- .changes/Migration 10.0.2 - 10.2.0.md | 67 + Directory.Packages.props | 35 +- aspnet-core/LINGYUN.MicroService.All.sln | 2629 ---- aspnet-core/LINGYUN.MicroService.All.slnx | 500 + aspnet-core/LINGYUN.MicroService.Aspire.sln | 2903 ---- aspnet-core/LINGYUN.MicroService.Aspire.slnx | 65 +- aspnet-core/LINGYUN.MicroService.Common.sln | 1246 -- aspnet-core/LINGYUN.MicroService.Common.slnx | 203 + .../LINGYUN.MicroService.SingleProject.sln | 2301 ---- .../LINGYUN.MicroService.SingleProject.slnx | 426 + aspnet-core/LINGYUN.MicroService.Startup.sln | 123 - .../LINGYUN.MicroService.TaskManagement.sln | 578 - .../LINGYUN.MicroService.TaskManagement.slnx | 117 + ...INGYUN.MicroService.WebhooksManagement.sln | 547 - ...NGYUN.MicroService.WebhooksManagement.slnx | 109 + .../LINGYUN.MicroService.WechatManagement.sln | 423 - ...LINGYUN.MicroService.WechatManagement.slnx | 83 + aspnet-core/LINGYUN.MicroService.Workflow.sln | 616 - .../LINGYUN.MicroService.Workflow.slnx | 118 + .../AIServiceModule.Configure.cs | 34 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 40 + .../SwaggerGen}/TenantHeaderParamter.cs | 7 +- .../appsettings.Development.json | 2 +- .../AdminServiceMigrationsDbContext.cs | 2 + ...viceMigrationsEntityFrameworkCoreModule.cs | 4 +- ...ce.AdminService.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-2-0.Designer.cs | 1086 ++ ...3034826_Upgrade-Abp-Framework-To-10-2-0.cs | 109 + ...ServiceMigrationsDbContextModelSnapshot.cs | 55 +- .../AdminServiceModule.Configure.cs | 34 +- .../AdminServiceModule.cs | 2 - .../Controllers/SettingMergeController.cs | 70 + .../Controllers/UserSettingMergeController.cs | 45 + ...NGYUN.Abp.MicroService.AdminService.csproj | 1 - .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 40 + .../SwaggerGen}/TenantHeaderParamter.cs | 7 +- .../ApiGatewayModule.cs | 6 +- .../yarp.json | 4 +- .../AppHost.cs | 10 +- .../DataSeeds/OpenIddictDataSeeder.cs | 23 + ...pgrade-Abp-Framework-To-10-2-0.Designer.cs | 1361 ++ ...2040021_Upgrade-Abp-Framework-To-10-2-0.cs | 91 + ...hServerMigrationsDbContextModelSnapshot.cs | 112 +- .../AuthServerModule.Configure.cs | 13 - .../AuthServerModule.cs | 12 +- ...LINGYUN.Abp.MicroService.AuthServer.csproj | 6 +- .../appsettings.Development.json | 8 +- .../IdentityServiceModule.Configure.cs | 43 +- .../IdentityServiceModule.cs | 13 +- ...UN.Abp.MicroService.IdentityService.csproj | 7 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen}/TenantHeaderParamter.cs | 7 +- .../appsettings.Development.json | 8 +- .../LocalizationServiceModule.Configure.cs | 33 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen}/TenantHeaderParamter.cs | 7 +- .../TenantHeaderParamter.cs | 36 - .../MessageServiceDbMigrationEventHandler.cs | 5 - .../MessageServiceModule.Configure.cs | 33 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen}/TenantHeaderParamter.cs | 7 +- .../TenantHeaderParamter.cs | 36 - .../appsettings.Development.json | 2 +- ...oService.PlatformService.DbMigrator.csproj | 4 + .../PlatformServiceDbMigratorModule.cs | 10 +- ...PlatformService.EntityFrameworkCore.csproj | 1 + ...117_Add-Blob-Management-Module.Designer.cs | 1488 +++ ...260411023117_Add-Blob-Management-Module.cs | 104 + ...ServiceMigrationsDbContextModelSnapshot.cs | 159 +- .../PlatformServiceDataSeeder.cs | 35 +- .../PlatformServiceDbMigrationEventHandler.cs | 18 +- .../PlatformServiceMigrationsDbContext.cs | 12 +- ...viceMigrationsEntityFrameworkCoreModule.cs | 4 +- ....cs => BlobTempCleanupBackgroundWorker.cs} | 20 +- .../Handlers/PrivateBlobProtecteder.cs | 76 + ...UN.Abp.MicroService.PlatformService.csproj | 17 +- .../PlatformServiceModule.Configure.cs | 32 +- .../PlatformServiceModule.cs | 50 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 40 + .../SwaggerGen/TenantHeaderParamter.cs | 34 + .../TenantHeaderParamter.cs | 35 - ...INGYUN.Abp.MicroService.TaskService.csproj | 4 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen/TenantHeaderParamter.cs | 35 + .../TaskServiceModule.Configure.cs | 44 +- .../TaskServiceModule.cs | 7 +- .../TenantHeaderParamter.cs | 36 - .../appsettings.Development.json | 5 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen/TenantHeaderParamter.cs | 35 + .../WeChatServiceModule.Configure.cs | 33 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen/TenantHeaderParamter.cs | 35 + .../TenantHeaderParamter.cs | 36 - .../WebhookServiceModule.Configure.cs | 33 +- ...UN.Abp.MicroService.WorkflowService.csproj | 2 +- .../SwaggerGen/EnumDescriptionSchemaFilter.cs | 41 + .../SwaggerGen/TenantHeaderParamter.cs | 35 + .../WorkflowServiceModule.Configure.cs | 58 +- .../WorkflowServiceModule.cs | 4 +- .../appsettings.Development.json | 6 +- ...AbpAuthorizationOrganizationUnitsModule.cs | 2 + ...tionUnitResourcePermissionValueProvider.cs | 92 + .../LINGYUN/Abp/Aliyun/AliyunClientFactory.cs | 49 +- ...entBlobContainerConfigurationExtensions.cs | 4 +- .../Aliyun/AliyunBlobProviderConfiguration.cs | 3 +- .../BlobStoring/Aliyun/IOssClientFactory.cs | 6 + .../BlobStoring/Aliyun/OssClientFactory.cs | 36 +- .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 0 ...ntityFrameworkCore.MySQL.Microting.csproj} | 12 +- .../MicrotingMySQLConnectionStringChecker.cs | 40 + ...EntityFrameworkCoreMySQLMicrotingModule.cs | 28 + ...AbpMicrotingMySQLModelBuilderExtensions.cs | 12 + ...textConfigurationContextMySQLExtensions.cs | 33 + .../AbpDbContextOptionsMySQLExtensions.cs | 29 + .../Abp/Exporter/ExporterAppService.cs | 4 +- .../Abp/Exporter/ImporterAppService.cs | 4 +- .../Abp/Exporter/IExcelExporterProvider.cs | 18 + .../Abp/Exporter/IExcelImporterProvider.cs | 18 + .../LINGYUN/Abp/Exporter/IExporterProvider.cs | 4 +- .../LINGYUN/Abp/Exporter/IImporterProvider.cs | 4 +- .../Abp/Exporter/IWordExporterProvider.cs | 26 + .../Abp/Exporter/NullExcelExporterProvider.cs | 17 + .../Abp/Exporter/NullExcelImporterProvider.cs | 17 + .../Abp/Exporter/NullExporterProvider.cs | 4 +- .../Abp/Exporter/NullImporterProvider.cs | 1 + .../Abp/Exporter/NullWordExporterProvider.cs | 22 + .../MagicodesIEExcelExporterProvider.cs | 40 +- .../MagicodesIEExcelImporterProvider.cs | 11 +- .../Exporter/AbpExporterMiniExcelModule.cs | 2 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 0 .../LINGYUN.Abp.Exporter.MiniSoftware.csproj | 26 + .../AbpExporterMiniExcelOptions.cs | 26 + .../AbpExporterMiniSoftwareModule.cs | 8 + .../AbpExporterMiniWordOptions.cs | 18 + .../MiniSoftware/MiniExcelExporterProvider.cs | 62 + .../MiniSoftware/MiniExcelImporterProvider.cs | 40 + .../MiniSoftware/MiniWordExporterProvider.cs | 73 + .../README.md | 46 + .../Client/ClientFeatureValueProvider.cs | 2 +- .../NavigationDataSeedContributor.cs | 53 +- .../Abp/UI/Navigation/NavigationDataSeeder.cs | 73 + ...vice.Applications.Single.DbMigrator.csproj | 2 +- .../Program.cs | 3 +- .../SingleDbMigratorModule.cs | 4 +- ...ns.Single.EntityFrameworkCore.MySql.csproj | 5 +- ...pgrade-Abp-Framework-To-10-2-0.Designer.cs | 6137 +++++++++ ...1022905_Upgrade-Abp-Framework-To-10-2-0.cs | 679 + .../SingleMigrationsDbContextModelSnapshot.cs | 801 +- ...igrationsEntityFrameworkCoreMySqlModule.cs | 43 +- ...ngle.EntityFrameworkCore.PostgreSql.csproj | 2 +- ...pgrade-Abp-Framework-To-10-2-0.Designer.cs | 5980 +++++++++ ...3035350_Upgrade-Abp-Framework-To-10-2-0.cs | 221 + ...019_Add-Blob-Management-Module.Designer.cs | 6137 +++++++++ ...260421023019_Add-Blob-Management-Module.cs | 104 + .../SingleMigrationsDbContextModelSnapshot.cs | 330 +- ...ionsEntityFrameworkCorePostgreSqlModule.cs | 4 +- ...ingle.EntityFrameworkCore.SqlServer.csproj | 2 +- ...pgrade-Abp-Framework-To-10-2-0.Designer.cs | 5987 +++++++++ ...3035440_Upgrade-Abp-Framework-To-10-2-0.cs | 223 + ...044_Add-Blob-Management-Module.Designer.cs | 6144 +++++++++ ...260421023044_Add-Blob-Management-Module.cs | 104 + .../SingleMigrationsDbContextModelSnapshot.cs | 334 +- ...tionsEntityFrameworkCoreSqlServerModule.cs | 4 +- .../DataSeeder/BlobDataSeedContributor.cs | 20 + .../RolePermissionDataSeedContributor.cs | 25 +- ...ications.Single.EntityFrameworkCore.csproj | 2 + .../SingleDbMigrationEventHandler.cs | 111 +- .../SingleMigrationsDbContext.cs | 52 +- ...ngleMigrationsEntityFrameworkCoreModule.cs | 4 + .../AuthServerDataSeeder.cs | 36 + .../AuthServerDbMigrationEventHandler.cs | 108 +- ...rverMigrationsEntityFrameworkCoreModule.cs | 7 +- .../DataSeeds/IdentityClaimTypeDataSeeder.cs | 89 + .../DataSeeds/IdentityUserRoleDataSeeder.cs | 125 + .../DataSeeds/OpenIddictDataSeeder.cs | 575 + ...vice.AuthServer.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-0-2.Designer.cs | 1375 ++ ...0064613_Upgrade-Abp-Framework-To-10-0-2.cs | 157 + ...hServerMigrationsDbContextModelSnapshot.cs | 123 +- .../BackendAdminDataSeeder.cs | 61 + .../BackendAdminDbMigrationEventHandler.cs | 29 +- ...dminMigrationsEntityFrameworkCoreModule.cs | 7 +- ...ce.BackendAdmin.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-0-2.Designer.cs | 1102 ++ ...0064540_Upgrade-Abp-Framework-To-10-0-2.cs | 127 + ...ndAdminMigrationsDbContextModelSnapshot.cs | 56 +- .../DataSeeder/WeChatResourceDataSeeder.cs | 36 +- ...rverMigrationsEntityFrameworkCoreModule.cs | 7 +- ....IdentityServer.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-0-2.Designer.cs | 2093 +++ ...0065028_Upgrade-Abp-Framework-To-10-0-2.cs | 120 + ...yServerMigrationsDbContextModelSnapshot.cs | 116 +- ...ationManagement.EntityFrameworkCore.csproj | 2 +- ...mentMigrationsEntityFrameworkCoreModule.cs | 7 +- ...ervice.Platform.EntityFrameworkCore.csproj | 4 +- .../PlatformDbMigrationEventHandler.cs | 25 +- ...formMigrationsEntityFrameworkCoreModule.cs | 16 +- .../PlatformServiceDataSeeder.cs | 43 + ...RealtimeMessage.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-0-2.Designer.cs | 814 ++ ...0065252_Upgrade-Abp-Framework-To-10-0-2.cs | 54 + ...MessageMigrationsDbContextModelSnapshot.cs | 55 +- .../RealtimeMessageDbMigrationEventHandler.cs | 5 - ...sageMigrationsEntityFrameworkCoreModule.cs | 7 +- ....TaskManagement.EntityFrameworkCore.csproj | 2 +- ...pgrade-Abp-Framework-To-10-0-2.Designer.cs | 282 + ...0073543_Upgrade-Abp-Framework-To-10-0-2.cs | 37 + ...agementMigrationsDbContextModelSnapshot.cs | 7 +- .../TaskManagementDataSeeder.cs | 140 + .../TaskManagementDbMigrationEventHandler.cs | 123 +- .../TaskManagementDbMigrationService.cs | 31 - ...mentMigrationsEntityFrameworkCoreModule.cs | 38 +- ...hooksManagement.EntityFrameworkCore.csproj | 2 +- ...bhooksManagementDbMigrationEventHandler.cs | 20 +- .../WebhooksManagementDbMigrationService.cs | 31 - ...mentMigrationsEntityFrameworkCoreModule.cs | 7 +- .../Abp/Account/Dto/IdentitySessionDto.cs | 2 +- .../LINGYUN/Abp/Account/AccountAppService.cs | 97 +- .../Abp/Account/MyProfileAppService.cs | 32 +- .../Abp/Account/UserProfilePictureProvider.cs | 4 +- .../Pages/Account/IdentityServerLoginModel.cs | 217 +- .../Pages/Account/OpenIddictLoginModel.cs | 91 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 0 .../LINGYUN.Abp.BlobManagement.Aliyun.csproj} | 47 +- .../Aliyun/AbpBlobManagementAliyunModule.cs} | 19 +- .../Aliyun/AliyunBlobProvider.cs | 185 + ...lientFactoryServiceCollectionExtensions.cs | 18 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 0 ...obManagement.Application.Contracts.csproj} | 7 +- ...lobManagementApplicationContractsModule.cs | 11 + .../BlobManagementRemoteServiceConsts.cs | 7 + .../Dtos/BlobContainerCreateDto.cs | 11 + .../BlobManagement/Dtos/BlobContainerDto.cs | 11 + .../Dtos/BlobContainerGetPagedListInput.cs | 8 + .../Dtos/BlobDownloadByNameInput.cs | 15 + .../Abp/BlobManagement/Dtos/BlobDto.cs | 36 + .../Dtos/BlobFileChunkCreateBaseDto.cs} | 67 +- .../Dtos/BlobFileChunkCreateDto.cs | 13 + .../BlobFileChunkCreateWithoutContainerDto.cs | 5 + .../Dtos/BlobFileCreateBaseDto.cs | 31 + .../BlobManagement/Dtos/BlobFileCreateDto.cs | 13 + .../Dtos/BlobFileCreateWithoutContainerDto.cs | 5 + .../Dtos/BlobFolderCreateBaseDto.cs | 19 + .../Dtos/BlobFolderCreateDto.cs | 13 + .../BlobFolderCreateWithoutContainerDto.cs | 5 + .../Dtos/BlobGetPagedListInput.cs | 13 + .../Dtos/BlobGetPagedListInputBase.cs | 20 + .../BlobGetPagedListWithoutContainerInput.cs | 5 + .../Abp/BlobManagement/IBlobAppService.cs | 27 + .../IBlobContainerAppService.cs | 18 + .../BlobManagement/IPrivateBlobAppService.cs | 27 + .../BlobManagement/IPublicBlobAppService.cs | 19 + .../Dtos/BlobFileCreateIntegrationDto.cs | 14 + .../Dtos/BlobFileDeleteIntegrationDto.cs | 5 + .../Dtos/BlobFileGetByNameIntegrationDto.cs | 15 + .../Integration/IBlobIntegrationService.cs | 20 + ...bManagementPermissionDefinitionProvider.cs | 49 + .../BlobManagementPermissionNames.cs | 35 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...YUN.Abp.BlobManagement.Application.csproj} | 57 +- .../AbpBlobManagementApplicationModule.cs | 26 + .../Abp/BlobManagement/BlobAppService.cs | 82 + .../Abp/BlobManagement/BlobAppServiceBase.cs | 243 + .../BlobManagement/BlobContainerAppService.cs | 76 + .../BlobManagementApplicationMappers.cs | 22 + .../BlobManagementApplicationService.cs | 13 + .../BlobWithoutContainerAppService.cs | 103 + .../Integration/BlobIntegrationService.cs | 217 + .../BlobManagement/PrivateBlobAppService.cs | 19 + .../PrivateBlobPolicyCheckProvider.cs | 17 + .../BlobManagement/PublicBlobAppService.cs | 30 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...N.Abp.BlobManagement.Domain.Shared.csproj} | 12 +- .../AbpBlobManagementDomainSharedModule.cs} | 70 +- .../LINGYUN/Abp/BlobManagement/BlobConsts.cs | 9 + .../Abp/BlobManagement/BlobContainerConsts.cs | 7 + .../Abp/BlobManagement/BlobContainerEto.cs | 20 + .../Abp/BlobManagement/BlobDownloadEto.cs | 22 + .../LINGYUN/Abp/BlobManagement/BlobEto.cs | 20 + .../BlobManagementErrorCodes.cs | 27 + .../LINGYUN/Abp/BlobManagement/BlobType.cs | 21 + ...lobManagementFeatureDefinitionProvider.cs} | 166 +- .../Features/BlobManagementFeatureNames.cs} | 100 +- .../Localization/BlobManagementResource.cs | 8 + .../Localization/Resources/en.json | 75 + .../Localization/Resources/zh-Hans.json | 75 + ...lobManagementSettingDefinitionProvider.cs} | 94 +- .../Settings/BlobManagementSettingNames.cs} | 38 +- .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + .../LINGYUN.Abp.BlobManagement.Domain.csproj} | 10 +- .../AbpBlobManagementDomainModule.cs | 39 + .../AbpBlobManagementOptions.cs | 32 + .../LINGYUN/Abp/BlobManagement/Blob.cs | 186 + .../Abp/BlobManagement/BlobContainer.cs | 40 + .../Abp/BlobManagement/BlobDataSeeder.cs | 53 + .../BlobManagement/BlobDownloadCacheItem.cs | 21 + .../BlobManagement/BlobDownloadIncreaser.cs | 60 + .../BlobManagement/BlobManagementContainer.cs | 8 + .../BlobManagementDbProperties.cs | 12 + .../BlobManagementDomainMappers.cs | 21 + .../LINGYUN/Abp/BlobManagement/BlobManager.cs | 397 + .../BlobManagement/BlobPolicyCheckContext.cs | 19 + .../BlobManagement/BlobTempCleanupService.cs | 94 + .../BlobUploadFileValidateCacheItem.cs | 20 + .../IBlobContainerRepository.cs | 30 + .../IBlobContainerRepositoryExtenssions.cs | 20 + .../Abp/BlobManagement/IBlobDataSeeder.cs | 9 + .../IBlobPolicyCheckProvider.cs | 10 + .../Abp/BlobManagement/IBlobProvider.cs | 44 + .../Abp/BlobManagement/IBlobRepository.cs | 43 + .../Abp/BlobManagement/NoneBlobDataSeeder.cs | 12 + .../System/IO/SystemExtensions.cs} | 46 +- .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ....BlobManagement.EntityFrameworkCore.csproj | 25 + ...BlobManagementEntityFrameworkCoreModule.cs | 30 + .../BlobManagementDbContext.cs | 26 + ...agementDbContextModelCreatingExtensions.cs | 52 + .../EfCoreBlobContainerRepository.cs | 63 + .../EfCoreBlobRepository.cs | 93 + .../IBlobManagementDbContext.cs | 12 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...GYUN.Abp.BlobManagement.FileSystem.csproj} | 50 +- .../AbpBlobManagementFileSystemModule.cs | 43 + .../FileSystem/FileSystemBlobProvider.cs | 174 + .../BlobClientProxy.Generated.cs | 85 + .../Abp/BlobManagement/BlobClientProxy.cs | 7 + .../BlobContainerClientProxy.Generated.cs | 52 + .../BlobContainerClientProxy.cs | 7 + .../LINGYUN/Abp/BlobManagement/BlobType.cs | 16 + .../Dtos/BlobContainerCreateDto.cs | 15 + .../BlobManagement/Dtos/BlobContainerDto.cs | 17 + .../Dtos/BlobContainerGetPagedListInput.cs | 15 + .../Dtos/BlobDownloadByNameInput.cs | 17 + .../Abp/BlobManagement/Dtos/BlobDto.cs | 28 + .../Dtos/BlobFileChunkCreateBaseDto.cs | 21 + .../Dtos/BlobFileChunkCreateDto.cs | 15 + .../BlobFileChunkCreateWithoutContainerDto.cs | 15 + .../Dtos/BlobFileCreateBaseDto.cs | 22 + .../BlobManagement/Dtos/BlobFileCreateDto.cs | 15 + .../Dtos/BlobFileCreateWithoutContainerDto.cs | 15 + .../Dtos/BlobFolderCreateBaseDto.cs | 17 + .../Dtos/BlobFolderCreateDto.cs | 15 + .../BlobFolderCreateWithoutContainerDto.cs | 15 + .../Dtos/BlobGetPagedListInput.cs | 15 + .../Dtos/BlobGetPagedListInputBase.cs | 20 + .../BlobGetPagedListWithoutContainerInput.cs | 15 + .../Abp/BlobManagement/IBlobAppService.cs | 32 + .../IBlobContainerAppService.cs | 23 + .../BlobManagement/IPrivateBlobAppService.cs | 32 + .../BlobManagement/IPublicBlobAppService.cs | 24 + .../BlobIntegrationClientProxy.Generated.cs | 55 + .../Integration/BlobIntegrationClientProxy.cs | 7 + .../Dtos/BlobFileCreateIntegrationDto.cs | 18 + .../Dtos/BlobFileGetByNameIntegrationDto.cs | 17 + .../Integration/IBlobIntegrationService.cs | 25 + .../PrivateBlobClientProxy.Generated.cs | 85 + .../BlobManagement/PrivateBlobClientProxy.cs | 7 + .../PublicBlobClientProxy.Generated.cs | 53 + .../BlobManagement/PublicBlobClientProxy.cs | 7 + .../blob-management-generate-proxy.json | 10887 ++++++++++++++++ .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ....Abp.BlobManagement.HttpApi.Client.csproj} | 58 +- .../AbpBlobManagementHttpApiClientModule.cs | 23 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...LINGYUN.Abp.BlobManagement.HttpApi.csproj} | 7 +- .../AbpBlobManagementHttpApiModule.cs | 29 + .../BlobManagement/BlobContainerController.cs | 46 + .../Abp/BlobManagement/BlobController.cs | 76 + .../Abp/BlobManagement/BlobControllerBase.cs | 14 + .../Integration/BlobIntegrationController.cs | 47 + .../BlobManagement/PrivateBlobController.cs | 76 + .../BlobManagement/PublicBlobController.cs | 48 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + .../LINGYUN.Abp.BlobManagement.Minio.csproj} | 8 +- .../Minio/AbpBlobManagementMinioModule.cs} | 20 +- .../BlobManagement/Minio/MinioBlobProvider.cs | 245 + ...lientFactoryServiceCollectionExtensions.cs | 2 +- .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...p.BlobManagement.SettingManagement.csproj} | 54 +- ...pBlobManagementSettingManagementModule.cs} | 38 +- .../BlobManagementSettingAppService.cs} | 35 +- .../BlobManagementSettingController.cs | 34 + .../IBlobManagementSettingAppService.cs | 7 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...LINGYUN.Abp.BlobManagement.Tencent.csproj} | 43 +- .../AbpBlobManagementTencentModule.cs} | 19 +- .../Tencent/TencentBlobProvider.cs | 216 + ...lientFactoryServiceCollectionExtensions.cs | 18 + .../FodyWeavers.xml | 0 .../FodyWeavers.xsd | 30 + ...YUN.Abp.BlobStoring.BlobManagement.csproj} | 49 +- .../AbpBlobStoringBlobManagementModule.cs | 29 + ...entBlobContainerConfigurationExtensions.cs | 25 + .../BlobManagementBlobNamingNormalizer.cs | 17 + .../BlobManagementBlobProvider.cs | 66 + ...BlobManagementBlobProviderConfiguration.cs | 13 + .../CachingManagement/CacheRemoveKeysInput.cs | 9 + .../Abp/CachingManagement/ICacheAppService.cs | 2 + .../Localization/Resources/en.json | 5 +- .../Localization/Resources/zh-Hans.json | 5 +- .../Abp/CachingManagement/CacheAppService.cs | 6 + .../Abp/CachingManagement/ICacheManager.cs | 5 +- .../ICacheManagerExtensions.cs | 20 + .../CachingManagement/RemoveCacheRequest.cs | 10 + .../Abp/CachingManagement/CacheController.cs | 8 + ...chingManagementStackExchangeRedisModule.cs | 4 + ...hingManagementStackExchangeRedisOptions.cs | 12 + .../StackExchangeRedisCacheManager.cs | 171 +- ....Abp.Elsa.EntityFrameworkCore.MySql.csproj | 9 +- .../AbpElsaEntityFrameworkCoreMySqlModule.cs | 4 +- .../MySql/PersistenceStartup.cs | 5 +- .../MySql/WebhooksStartup.cs | 4 +- .../MySql/WorkflowSettingsStartup.cs | 4 +- .../IFeatureDefinitionAppService.cs | 3 + .../Application/Contracts/en.json | 9 +- .../Application/Contracts/zh-Hans.json | 9 +- .../FeatureDefinitionAppService.cs | 20 + .../FeatureDefinitionController.cs | 7 + .../Dto/OrganizationUnitGetChildrenDto.cs | 5 +- .../FodyWeavers.xml | 4 +- .../FodyWeavers.xml | 3 + .../FodyWeavers.xsd | 30 + .../LINGYUN.Abp.Identity.AspNetCore.csproj} | 9 +- .../AspNetCore/AbpIdentityAspNetCoreModule.cs | 18 + .../AbpPhoneNumberRegisterTokenProvider.cs | 15 + .../Abp/Identity/AspNetCore/TotpService.cs} | 103 +- .../Abp/Identity/AbpIdentityDomainModule.cs | 9 + ...ntityUserPhoneNumberRegisterExtenssions.cs | 17 + .../Abp/Identity/Security/ITotpService.cs | 11 - .../Abp/Identity/SecurityTokenCacheItem.cs | 11 +- .../UserTwoFactorTokenProviderConsts.cs | 10 + .../Identity/IdentityUserManagerExtensions.cs | 19 +- .../Identity/PhoneNumberUserValidator.cs | 28 +- .../EfCoreIdentityUserRepository.cs | 443 +- .../SmsValidator/SmsTokenGrantValidator.cs | 6 +- .../AbpLocalizationManagementDomainModule.cs | 8 - .../ExternalLocalizationStoreCache.cs | 134 +- .../ExternalLocalizationTextStoreCache.cs | 48 +- .../LocalizationLanguageStoreCache.cs | 35 +- .../LocalizationTextCacheRefreshWorker.cs | 95 - .../LocalizationTextStoreCache.cs | 37 +- .../StaticLocalizationSaver.cs | 48 +- .../OpenIddict/Sms/SmsTokenExtensionGrant.cs | 2 +- .../FodyWeavers.xsd | 30 - .../AbpBlobStoringOssManagementModule.cs | 11 - ...entBlobContainerConfigurationExtensions.cs | 25 - .../OssManagementBlobNamingNormalizer.cs | 30 - .../OssManagementBlobProvider.cs | 98 - .../OssManagementBlobProviderConfiguration.cs | 20 - ...anagementBlobProviderConfigurationNames.cs | 6 - .../README.EN.md | 96 - .../README.md | 69 - .../FodyWeavers.xsd | 30 - .../Aliyun/AliyunOssContainer.cs | 427 - .../Aliyun/AliyunOssContainerFactory.cs | 35 - ...OssContainerServiceCollectionExtensions.cs | 21 - .../README.EN.md | 37 - .../README.md | 37 - .../FodyWeavers.xsd | 30 - ...OssManagementApplicationContractsModule.cs | 11 - .../OssManagement/BulkDeleteOssObjectInput.cs | 14 - .../Abp/OssManagement/CreateOssObjectInput.cs | 27 - .../LINGYUN/Abp/OssManagement/FileShareDto.cs | 31 - .../Abp/OssManagement/FileShareInput.cs | 20 - .../OssManagement/GetFileMultiTenancyInput.cs | 32 - .../Abp/OssManagement/GetFileShareDto.cs | 16 - .../Abp/OssManagement/GetFilesInput.cs | 9 - .../OssManagement/GetOssContainersInput.cs | 9 - .../Abp/OssManagement/GetOssObjectInput.cs | 16 - .../Abp/OssManagement/GetOssObjectsInput.cs | 13 - .../Abp/OssManagement/GetPublicFileInput.cs | 13 - .../Abp/OssManagement/GetStaticFileInput.cs | 15 - .../Abp/OssManagement/IFileUploader.cs | 9 - .../Abp/OssManagement/IFileValidater.cs | 8 - .../OssManagement/IOssContainerAppService.cs | 17 - .../Abp/OssManagement/IOssObjectAppService.cs | 35 - .../OssManagement/IPrivateFileAppService.cs | 23 - .../OssManagement/IPublicFileAppService.cs | 19 - .../Abp/OssManagement/IShareFileAppService.cs | 11 - .../OssManagement/IStaticFilesAppService.cs | 10 - .../Integration/GetOssObjectExistsResult.cs | 6 - .../IOssObjectIntegrationService.cs | 18 - .../Abp/OssManagement/OssContainerDto.cs | 13 - .../OssManagement/OssContainersResultDto.cs | 12 - .../OssManagementRemoteServiceConsts.cs | 8 - .../LINGYUN/Abp/OssManagement/OssObjectDto.cs | 16 - .../Abp/OssManagement/OssObjectsResultDto.cs | 14 - ...sManagementPermissionDefinitionProvider.cs | 35 - .../AbpOssManagementPermissions.cs | 26 - .../LINGYUN/Abp/OssManagement/UploadFile.cs | 17 - .../Abp/OssManagement/UploadFileInput.cs | 18 - .../OssManagement/ValidationOssObjectInput.cs | 28 - .../README.EN.md | 49 - .../README.md | 49 - .../FodyWeavers.xsd | 30 - ....Abp.OssManagement.Application.csproj.user | 6 - .../AbpOssManagementApplicationModule.cs | 21 - .../Abp/OssManagement/FileAppServiceBase.cs | 149 - .../Abp/OssManagement/FileShareCacheItem.cs | 95 - .../Abp/OssManagement/FileUploadMerger.cs | 100 - .../LINGYUN/Abp/OssManagement/FileUploader.cs | 101 - .../Abp/OssManagement/FileValidater.cs | 95 - .../OssObjectIntegrationService.cs | 94 - .../OssManagement/OssContainerAppService.cs | 69 - .../OssManagementApplicationMappers.cs | 76 - .../OssManagementApplicationServiceBase.cs | 13 - .../Abp/OssManagement/OssObjectAppService.cs | 129 - .../OssManagement/OssObjectUrlCacheItem.cs | 24 - .../OssManagement/PrivateFileAppService.cs | 235 - .../Abp/OssManagement/PublicFileAppService.cs | 85 - .../Abp/OssManagement/ShareFileAppService.cs | 126 - .../OssManagement/StaticFilesAppService.cs | 47 - .../README.EN.md | 47 - .../README.md | 47 - .../FodyWeavers.xsd | 30 - .../Localization/AbpOssManagementResource.cs | 8 - .../Localization/Resources/en.json | 99 - .../Localization/Resources/zh-Hans.json | 99 - .../OssManagement/OssManagementErrorCodes.cs | 18 - .../OssManagement/OssObjectAcknowledgeEto.cs | 36 - .../README.EN.md | 46 - .../README.md | 46 - .../System/IO/StreamExtensions.cs | 11 - .../FodyWeavers.xsd | 30 - .../AbpOssManagementContainer.cs | 8 - .../AbpOssManagementDomainModule.cs | 16 - .../OssManagement/AbpOssManagementOptions.cs | 88 - .../AbpOssManagementOptionsExtensions.cs | 14 - .../OssManagement/BulkDeleteObjectRequest.cs | 25 - .../OssManagement/CreateOssObjectRequest.cs | 35 - .../OssManagement/ExprieOssObjectRequest.cs | 18 - .../OssManagement/GetOssContainersRequest.cs | 20 - .../OssManagement/GetOssContainersResponse.cs | 27 - .../Abp/OssManagement/GetOssObjectRequest.cs | 33 - .../Abp/OssManagement/GetOssObjectsRequest.cs | 36 - .../OssManagement/GetOssObjectsResponse.cs | 32 - .../Abp/OssManagement/IOssContainer.cs | 81 - .../OssManagement/IOssContainerExtensions.cs | 92 - .../Abp/OssManagement/IOssContainerFactory.cs | 17 - .../Abp/OssManagement/IOssObjectExpireor.cs | 7 - .../IOssObjectProcesserContributor.cs | 8 - .../OssManagement/NoneOssObjectProcesser.cs | 13 - .../OssManagement/NullOssObjectExpireor.cs | 15 - .../LINGYUN/Abp/OssManagement/OssContainer.cs | 30 - .../Abp/OssManagement/OssContainerBase.cs | 70 - .../LINGYUN/Abp/OssManagement/OssObject.cs | 52 - .../OssObjectAcknowledgeHandler.cs | 105 - .../Abp/OssManagement/OssObjectComparer.cs | 26 - .../OssObjectProcesserContext.cs | 31 - .../OssObjectTempCleanupService.cs | 56 - .../OssStaticContainerDataSeedContributor.cs | 29 - .../README.EN.md | 28 - .../README.md | 28 - .../System/ByteExtensions.cs | 31 - .../System/StringArrayArgsExtensions.cs | 31 - .../README.EN.md | 53 - .../README.md | 53 - .../README.EN.md | 52 - .../README.md | 52 - .../README.EN.md | 46 - .../README.md | 46 - .../FodyWeavers.xsd | 30 - .../AbpOssManagementFileSystemModule.cs | 41 - .../FileSystem/FileSystemOssContainer.cs | 576 - .../FileSystemOssContainerFactory.cs | 45 - ...OssContainerServiceCollectionExtensions.cs | 21 - .../README.EN.md | 45 - .../README.md | 45 - .../System/ByteExtensions.cs | 31 - .../System/StringArrayArgsExtensions.cs | 31 - ...sObjectIntegrationClientProxy.Generated.cs | 54 - .../OssObjectIntegrationClientProxy.cs | 7 - .../OssContainerClientProxy.Generated.cs | 59 - .../OssManagement/OssContainerClientProxy.cs | 7 - .../OssObjectClientProxy.Generated.cs | 76 - .../Abp/OssManagement/OssObjectClientProxy.cs | 7 - .../PrivateFilesClientProxy.Generated.cs | 73 - .../OssManagement/PrivateFilesClientProxy.cs | 7 - .../PublicFilesClientProxy.Generated.cs | 60 - .../OssManagement/PublicFilesClientProxy.cs | 7 - .../StaticFilesClientProxy.Generated.cs | 28 - .../OssManagement/StaticFilesClientProxy.cs | 7 - .../oss-management-generate-proxy.json | 2796 ---- .../FodyWeavers.xsd | 30 - .../AbpOssManagementHttpApiClientModule.cs | 25 - .../README.EN.md | 47 - .../README.md | 47 - .../FodyWeavers.xsd | 30 - .../AbpOssManagementHttpApiModule.cs | 46 - .../OssObjectIntegrationController.cs | 47 - .../OssManagement/OssContainerController.cs | 54 - .../Abp/OssManagement/OssObjectController.cs | 90 - .../OssManagement/PrivateFilesController.cs | 85 - .../OssManagement/PublicFilesController.cs | 70 - .../Abp/OssManagement/ShareFilesController.cs | 32 - .../OssManagement/StaticFilesController.cs | 53 - .../README.EN.md | 44 - .../README.md | 44 - .../AbpOssManagementImageSharpModule.cs | 15 - .../ImageSharpOssObjectProcesser.cs | 64 - .../README.EN.md | 47 - .../README.md | 47 - .../Imaging/AbpImagingProcesserContributor.cs | 79 - .../Imaging/AbpOssManagementImagingModule.cs | 18 - .../README.EN.md | 51 - .../README.md | 51 - .../OssManagement/Minio/MinioOssContainer.cs | 564 - .../Minio/MinioOssContainerFactory.cs | 59 - ...OssContainerServiceCollectionExtensions.cs | 21 - .../README.EN.md | 40 - .../LINGYUN.Abp.OssManagement.Minio/README.md | 40 - .../LINGYUN.Abp.OssManagement.Nexus.csproj | 21 - .../Nexus/AbpOssManagementNexusModule.cs | 38 - .../OssManagement/Nexus/NexusOssContainer.cs | 362 - .../Nexus/NexusOssContainerFactory.cs | 60 - ...OssContainerServiceCollectionExtensions.cs | 21 - .../README.EN.md | 43 - .../LINGYUN.Abp.OssManagement.Nexus/README.md | 43 - .../System/IO/SystemExtensions.cs | 24 - .../FodyWeavers.xsd | 30 - .../IOssManagementSettingAppService.cs | 7 - .../OssManagementSettingController.cs | 35 - .../README.EN.md | 49 - .../README.md | 49 - .../FodyWeavers.xsd | 30 - .../Tencent/TencentOssContainer.cs | 478 - .../Tencent/TencentOssContainerFactory.cs | 45 - ...OssContainerServiceCollectionExtensions.cs | 21 - .../README.EN.md | 46 - .../README.md | 46 - aspnet-core/modules/oss-management/README.md | 64 - .../PermissionDefinitionCreateOrUpdateDto.cs | 6 + .../Dto/PermissionDefinitionDto.cs | 4 + .../IPermissionDefinitionAppService.cs | 3 + .../Application/Contracts/en.json | 6 +- .../Application/Contracts/zh-Hans.json | 6 +- .../PermissionDefinitionAppService.cs | 36 + .../PermissionAppService.cs | 14 +- .../PermissionDefinitionController.cs | 7 + ...eVbenAdmin5NavigationDefinitionProvider.cs | 20 +- .../Messages/Dto/EmailMessageGetListInput.cs | 1 + .../Messages/EmailMessageAppService.cs | 3 + .../Platform/Packages/PackageAppService.cs | 3 +- .../Platform/Packages/PackageBlobManager.cs | 6 +- .../Notifications/INotificationAppService.cs | 3 +- .../Notifications/NotificationAppService.cs | 23 +- .../NotificationClientProxy.Generated.cs | 4 +- .../Notifications/NotificationController.cs | 2 +- .../ISettingDefinitionAppService.cs | 3 + .../Localization/Resources/en.json | 10 +- .../Localization/Resources/zh-Hans.json | 10 +- .../SettingDefinitionAppService.cs | 22 +- .../SettingDefinitionController.cs | 7 + .../Class1.cs | 6 + ...LINGYUN.Abp.BackgroundTasks.TickerQ.csproj | 24 + .../Scriban/ScribanTemplateLocalizer.cs | 12 +- .../Distributed/ChatMessageEventHandler.cs | 1 + ...tSynchronizer.cs => TenantEventHandler.cs} | 11 +- .../EventBus/Local/PrivateBlobProtecteder.cs | 74 + .../GlobalUsings.cs | 30 +- ...LY.MicroService.Applications.Single.csproj | 25 +- ...rviceApplicationsSingleModule.Configure.cs | 41 +- .../MicroServiceApplicationsSingleModule.cs | 36 +- .../Program.cs | 2 +- .../TenantHeaderParamter.cs | 6 +- .../appsettings.Development.json | 10 +- .../AuthServerHttpApiHostModule.Configure.cs | 41 +- .../AuthServerHttpApiHostModule.cs | 12 +- ...icroService.AuthServer.HttpApi.Host.csproj | 8 +- .../TenantHeaderParamter.cs | 4 +- .../AuthServerModule.Configure.cs | 8 - .../AuthServerModule.Seeder.cs | 15 - .../AuthServerModule.cs | 9 +- .../AuthServerDataSeedContributor.cs | 309 - .../DataSeeder/AuthServerDataSeederWorker.cs | 21 - .../LY.MicroService.AuthServer.csproj | 6 +- ...BackendAdminHttpApiHostModule.Configure.cs | 31 +- .../BackendAdminHttpApiHostModule.Seeder.cs | 15 - .../BackendAdminHttpApiHostModule.cs | 4 +- .../BackendAdminDataSeederWorker.cs | 21 - ...roService.BackendAdmin.HttpApi.Host.csproj | 4 +- .../TenantHeaderParamter.cs | 6 +- ...entityServerHttpApiHostModule.Configure.cs | 31 +- .../IdentityServerHttpApiHostModule.cs | 8 +- ...Service.identityServer.HttpApi.Host.csproj | 4 +- .../TenantHeaderParamter.cs | 6 +- .../IdentityServerDataSeederWorker.cs | 21 - .../IdentityServerModule.Seeder.cs | 15 - .../IdentityServerModule.cs | 5 +- .../LY.MicroService.IdentityServer.csproj | 2 +- .../LocalizationManagementDataSeederWorker.cs | 21 - ...onManagementHttpApiHostModule.Configure.cs | 31 +- ...ationManagementHttpApiHostModule.Seeder.cs | 15 - ...LocalizationManagementHttpApiHostModule.cs | 1 - .../TenantHeaderParamter.cs | 4 +- ....cs => BlobTempCleanupBackgroundWorker.cs} | 144 +- .../PlatformManagementDataSeederWorker.cs | 21 - .../Handlers/PrivateBlobProtecteder.cs | 79 + ...ice.PlatformManagement.HttpApi.Host.csproj | 18 +- .../Packages/PackageBlobOssManager.cs | 98 - ...rmManagementHttpApiHostModule.Configure.cs | 32 +- ...tformManagementHttpApiHostModule.Seeder.cs | 15 - .../PlatformManagementHttpApiHostModule.cs | 49 +- .../TenantHeaderParamter.cs | 4 +- .../RealtimeMessageDataSeederWorker.cs | 21 - ...ltimeMessageHttpApiHostModule.Configure.cs | 31 +- ...RealtimeMessageHttpApiHostModule.Seeder.cs | 15 - .../RealtimeMessageHttpApiHostModule.cs | 1 - .../TenantHeaderParamter.cs | 4 +- ...Service.TaskManagement.HttpApi.Host.csproj | 2 +- ...skManagementHttpApiHostModule.Configure.cs | 48 +- .../TaskManagementHttpApiHostModule.cs | 5 +- .../TenantHeaderParamter.cs | 4 +- ...rvice.WechatManagement.HttpApi.Host.csproj | 2 +- .../WechatManagementHttpApiHostModule.cs | 4 +- .../WorkflowManagementDataSeederWorker.cs | 21 - .../EventBus/Handlers/TenantSynchronizer.cs | 66 - ...ice.WorkflowManagement.HttpApi.Host.csproj | 2 +- .../TenantHeaderParamter.cs | 4 +- ...owManagementHttpApiHostModule.Configure.cs | 58 +- .../WorkflowManagementHttpApiHostModule.cs | 4 +- ...orkflowManagement.Next.HttpApi.Host.csproj | 4 +- common.props | 4 +- 738 files changed, 68258 insertions(+), 27652 deletions(-) create mode 100644 .changes/Migration 10.0.2 - 10.2.0.md delete mode 100644 aspnet-core/LINGYUN.MicroService.All.sln create mode 100644 aspnet-core/LINGYUN.MicroService.All.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.Aspire.sln delete mode 100644 aspnet-core/LINGYUN.MicroService.Common.sln create mode 100644 aspnet-core/LINGYUN.MicroService.Common.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.SingleProject.sln create mode 100644 aspnet-core/LINGYUN.MicroService.SingleProject.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.Startup.sln delete mode 100644 aspnet-core/LINGYUN.MicroService.TaskManagement.sln create mode 100644 aspnet-core/LINGYUN.MicroService.TaskManagement.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.WebhooksManagement.sln create mode 100644 aspnet-core/LINGYUN.MicroService.WebhooksManagement.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.WechatManagement.sln create mode 100644 aspnet-core/LINGYUN.MicroService.WechatManagement.slnx delete mode 100644 aspnet-core/LINGYUN.MicroService.Workflow.sln create mode 100644 aspnet-core/LINGYUN.MicroService.Workflow.slnx create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs rename aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/{ => Swashbuckle/AspNetCore/SwaggerGen}/TenantHeaderParamter.cs (84%) create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.Designer.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/SettingMergeController.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/UserSettingMergeController.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs rename aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/{ => Swashbuckle/AspNetCore/SwaggerGen}/TenantHeaderParamter.cs (83%) create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.Designer.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs rename aspnet-core/aspire/{LINGYUN.Abp.MicroService.WeChatService => LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen}/TenantHeaderParamter.cs (84%) create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs rename aspnet-core/aspire/{LINGYUN.Abp.MicroService.WorkflowService => LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen}/TenantHeaderParamter.cs (84%) delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs rename aspnet-core/aspire/{LINGYUN.Abp.MicroService.IdentityService => LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen}/TenantHeaderParamter.cs (84%) delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.Designer.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.cs rename aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/{OssObjectTempCleanupBackgroundWorker.cs => BlobTempCleanupBackgroundWorker.cs} (76%) create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Handlers/PrivateBlobProtecteder.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs delete mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/TenantHeaderParamter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs create mode 100644 aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs create mode 100644 aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/Permissions/OrganizationUnitResourcePermissionValueProvider.cs rename aspnet-core/{modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement => framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting}/FodyWeavers.xml (100%) rename aspnet-core/{modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp => framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting}/FodyWeavers.xsd (100%) rename aspnet-core/{modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj => framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting.csproj} (61%) create mode 100644 aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/ConnectionStrings/MicrotingMySQLConnectionStringChecker.cs create mode 100644 aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/MySQL/AbpEntityFrameworkCoreMySQLMicrotingModule.cs create mode 100644 aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Microsoft/EntityFrameworkCore/AbpMicrotingMySQLModelBuilderExtensions.cs create mode 100644 aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs create mode 100644 aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelExporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelImporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IWordExporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelExporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelImporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullWordExporterProvider.cs rename aspnet-core/{modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun => framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware}/FodyWeavers.xml (100%) rename aspnet-core/{modules/oss-management/LINGYUN.Abp.OssManagement.Imaging => framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware}/FodyWeavers.xsd (100%) create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN.Abp.Exporter.MiniSoftware.csproj create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniExcelOptions.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniSoftwareModule.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniWordOptions.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniWordExporterProvider.cs create mode 100644 aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/README.md create mode 100644 aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/BlobDataSeedContributor.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.cs create mode 100644 aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.cs create mode 100644 aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformServiceDataSeeder.cs create mode 100644 aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.cs create mode 100644 aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.cs create mode 100644 aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Application.Contracts => blob-management/LINGYUN.Abp.BlobManagement.Aliyun}/FodyWeavers.xml (100%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Minio => blob-management/LINGYUN.Abp.BlobManagement.Aliyun}/FodyWeavers.xsd (100%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj => blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN.Abp.BlobManagement.Aliyun.csproj} (61%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs => blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AbpBlobManagementAliyunModule.cs} (50%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AliyunBlobProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunHttpClientFactoryServiceCollectionExtensions.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Application => blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts}/FodyWeavers.xml (100%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Nexus => blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts}/FodyWeavers.xsd (100%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj => blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN.Abp.BlobManagement.Application.Contracts.csproj} (68%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationContractsModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/BlobManagementRemoteServiceConsts.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs => blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs} (55%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileDeleteIntegrationDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionDefinitionProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionNames.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared => blob-management/LINGYUN.Abp.BlobManagement.Application}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj => blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN.Abp.BlobManagement.Application.csproj} (66%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppServiceBase.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobContainerAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationMappers.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobWithoutContainerAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobPolicyCheckProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PublicBlobAppService.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN.Abp.BlobManagement.Domain.Shared.csproj} (67%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainSharedModule.cs} (55%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobConsts.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerConsts.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerEto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobDownloadEto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobEto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobManagementErrorCodes.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobType.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureDefinitionProvider.cs} (51%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureNames.cs} (77%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/BlobManagementResource.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/en.json create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/zh-Hans.json rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingDefinitionProvider.cs} (55%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingNames.cs} (56%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.FileSystem => blob-management/LINGYUN.Abp.BlobManagement.Domain}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj => blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN.Abp.BlobManagement.Domain.csproj} (67%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementOptions.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/Blob.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobContainer.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDataSeeder.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadCacheItem.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadIncreaser.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementContainer.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDbProperties.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDomainMappers.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManager.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobPolicyCheckContext.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobTempCleanupService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobUploadFileValidateCacheItem.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepository.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepositoryExtenssions.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobDataSeeder.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobPolicyCheckProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobRepository.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/NoneBlobDataSeeder.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/IO/FileSystemExtensions.cs => blob-management/LINGYUN.Abp.BlobManagement.Domain/System/IO/SystemExtensions.cs} (80%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client => blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xsd create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN.Abp.BlobManagement.EntityFrameworkCore.csproj create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/AbpBlobManagementEntityFrameworkCoreModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContext.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContextModelCreatingExtensions.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobContainerRepository.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobRepository.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/IBlobManagementDbContext.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.HttpApi => blob-management/LINGYUN.Abp.BlobManagement.FileSystem}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN.Abp.OssManagement.FileSystem.csproj => blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN.Abp.BlobManagement.FileSystem.csproj} (63%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/AbpBlobManagementFileSystemModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/FileSystemBlobProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.Generated.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.Generated.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobType.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.Generated.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.Generated.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.Generated.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/blob-management-generate-proxy.json rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.ImageSharp => blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN.Abp.OssManagement.HttpApi.Client.csproj => blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN.Abp.BlobManagement.HttpApi.Client.csproj} (52%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiClientModule.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Imaging => blob-management/LINGYUN.Abp.BlobManagement.HttpApi}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN.Abp.OssManagement.HttpApi.csproj => blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN.Abp.BlobManagement.HttpApi.csproj} (67%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobContainerController.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobController.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobControllerBase.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationController.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PrivateBlobController.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PublicBlobController.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Minio => blob-management/LINGYUN.Abp.BlobManagement.Minio}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN.Abp.OssManagement.Minio.csproj => blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN.Abp.BlobManagement.Minio.csproj} (68%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/AbpOssManagementMinioModule.cs => blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/AbpBlobManagementMinioModule.cs} (54%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/MinioBlobProvider.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Minio => blob-management/LINGYUN.Abp.BlobManagement.Minio}/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs (86%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Nexus => blob-management/LINGYUN.Abp.BlobManagement.SettingManagement}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN.Abp.OssManagement.SettingManagement.csproj => blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN.Abp.BlobManagement.SettingManagement.csproj} (69%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/AbpOssManagementSettingManagementModule.cs => blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/AbpBlobManagementSettingManagementModule.cs} (51%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs => blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingAppService.cs} (56%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingController.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/IBlobManagementSettingAppService.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.SettingManagement => blob-management/LINGYUN.Abp.BlobManagement.Tencent}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN.Abp.OssManagement.Tencent.csproj => blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN.Abp.BlobManagement.Tencent.csproj} (67%) rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/AbpOssManagementTencentModule.cs => blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/AbpBlobManagementTencentModule.cs} (50%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/TencentBlobProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentHttpClientFactoryServiceCollectionExtensions.cs rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Tencent => blob-management/LINGYUN.Abp.BlobStoring.BlobManagement}/FodyWeavers.xml (100%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN.Abp.BlobStoring.OssManagement.csproj => blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN.Abp.BlobStoring.BlobManagement.csproj} (65%) create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/AbpBlobStoringBlobManagementModule.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobContainerConfigurationExtensions.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobNamingNormalizer.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProvider.cs create mode 100644 aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProviderConfiguration.cs create mode 100644 aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/CacheRemoveKeysInput.cs create mode 100644 aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/RemoveCacheRequest.cs create mode 100644 aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisOptions.cs create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xml create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xsd rename aspnet-core/modules/{oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj => identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN.Abp.Identity.AspNetCore.csproj} (64%) create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpPhoneNumberRegisterTokenProvider.cs rename aspnet-core/modules/identity/{LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/DefaultTotpService.cs => LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/TotpService.cs} (50%) create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/IdentityUserPhoneNumberRegisterExtenssions.cs delete mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/ITotpService.cs create mode 100644 aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/UserTwoFactorTokenProviderConsts.cs delete mode 100644 aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextCacheRefreshWorker.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/AbpBlobStoringOssManagementModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobContainerConfigurationExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfiguration.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfigurationNames.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunOssContainerServiceCollectionExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileMultiTenancyInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileShareDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFilesInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetPublicFileInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileValidater.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPrivateFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPublicFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IShareFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/GetOssObjectExistsResult.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/IOssObjectIntegrationService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFile.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj.user delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileShareCacheItem.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileValidater.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationMappers.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectUrlCacheItem.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/ShareFileAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeEto.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/ExprieOssObjectRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectExpireor.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NullOssObjectExpireor.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeHandler.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectTempCleanupService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssStaticContainerDataSeedContributor.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/AbpOssManagementFileSystemModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/Microsoft/Extensions/DependencyInjection/FileSystemOssContainerServiceCollectionExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/ByteExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/StringArrayArgsExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.Generated.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/oss-management-generate-proxy.json delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiClientModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssContainerController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/ShareFilesController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioOssContainerServiceCollectionExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN.Abp.OssManagement.Nexus.csproj delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/AbpOssManagementNexusModule.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/Microsoft/Extensions/DependencyInjection/NexusOssContainerServiceCollectionExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/System/IO/SystemExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xsd delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentOssContainerServiceCollectionExtensions.cs delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.EN.md delete mode 100644 aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.md delete mode 100644 aspnet-core/modules/oss-management/README.md create mode 100644 aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/Class1.cs create mode 100644 aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/LINGYUN.Abp.BackgroundTasks.TickerQ.csproj rename aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/{TenantSynchronizer.cs => TenantEventHandler.cs} (83%) create mode 100644 aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Local/PrivateBlobProtecteder.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Seeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeedContributor.cs delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Seeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/DataSeeder/BackendAdminDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.IdentityServer/DataSeeder/IdentityServerDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.Seeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/DataSeeder/LocalizationManagementDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Seeder.cs rename aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/{OssObjectTempCleanupBackgroundWorker.cs => BlobTempCleanupBackgroundWorker.cs} (77%) delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/DataSeeder/PlatformManagementDataSeederWorker.cs create mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Handlers/PrivateBlobProtecteder.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Packages/PackageBlobOssManager.cs delete mode 100644 aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Seeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/DataSeeder/RealtimeMessageDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Seeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/DataSeeder/WorkflowManagementDataSeederWorker.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/EventBus/Handlers/TenantSynchronizer.cs diff --git a/.changes/Migration 10.0.2 - 10.2.0.md b/.changes/Migration 10.0.2 - 10.2.0.md new file mode 100644 index 000000000..6d05ca4f8 --- /dev/null +++ b/.changes/Migration 10.0.2 - 10.2.0.md @@ -0,0 +1,67 @@ +# 10.0.2 - 10.2.0 + +## 模块变更 + +1. [权限管理模块] abp官方新增 [ConfigurationFeatureValueProvider](https://github.com/abpframework/abp/blob/dev/framework/src/Volo.Abp.Features/Volo/Abp/Features/ConfigurationFeatureValueProvider.cs), 此提供者使用简称为 `C` 的功能提供者, 与本项目中客户端功能提供者 `ClientFeatureValueProvider` 重名, 因此 `ClientFeatureValueProvider`简称将变更为 `CT` + + > *需要手动执行数据库语句以适配此变更:* + ```postgresql + update "AbpFeatureValues" afv set "ProviderName" = 'CT' where afv."ProviderName" = 'C' + ``` + +2. [权限管理模块] 增加 [资源权限](https://github.com/abpframework/abp/tree/dev/framework/src/Volo.Abp.Authorization/Volo/Abp/Authorization/Permissions/Resources) 自定义接口. + +3. [缓存管理模块] 增加批量删除缓存功能. + +4. [缓存管理模块] 修复模糊查询时数据为空问题. + +5. [缓存管理模块] 增加缓存管理页面. + +6. [多语言管理模块] 修复动态本地化 + +7. [权限管理模块] 增加组织机构资源权限提供者 `OrganizationUnitResourcePermissionValueProvider` + +8. [对象存储模块] 重构领域层, 增加持久化层, 存储对象引用、私有文件访问权限, 实现层通过对象引用访问Oss + +9. [单体应用服务] 重构数据种子, 解决部分与abp框架冲突种子数据, 造成新租户事件执行失败 + +10. [Elsa工作量模块] 由于Elsa2.x版本依赖Swashbuckle 6.x版本, 而abp依赖10.x版本, 暂时在Swagger配置中移除Elsa相关接口 + +11. [EFCoreMySql] 由于 `Pomelo.EntityFrameworkCore.MySql` 太长时间未适配.NET 10, 使用 `Microting.EntityFrameworkCore.MySql` 替换, 详情见: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/2007 + +12. [单体应用服务] 新增缺失的MySql数据库迁移脚本, 由于MySql InnoDB 引擎对索引有长度限制, abp 资源权限索引需要限制长度, 暂时移除资源名称加入索引中 + +13. [解决方案变更] 解决方案文件从 `sln` 格式变更为 `slnx` 格式 + +14. [数据导出模块] 增加 `IExcelExporterProvider`、`IExcelImporterProvider`、`IWordExporterProvider` 接口, 原 `IExporterProvider`、`IImporterProvider` 标记为弃用 + +15. [数据导出模块] 增加 `AbpExporterMiniSoftwareModule` 模块, 集成 `MiniExcel`、`MiniWord` 实现 `IExcelExporterProvider`、`IExcelImporterProvider`、`IWordExporterProvider` 接口 + + +## 依赖项变更 + +| 库名称 | 原版本 | 现版本 | +| -------------------------------------------- | --------- | ------ | +| Volo.Abp.* | 10.0.2 | 10.2.0 | +| Elsa2 | 2.16.0 | 2.16.1 | +| Elsa3 | 3.3.5 | 3.6.0 | +| Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite | 5.0.2 | 5.2.0 | +| Microsoft.Bcl.AsyncInterfaces | 10.0.0 | 10.0.2 | +| MySql.EntityFrameworkCore | 10.0.0-rc | 10.0.1 | +| Microting.EntityFrameworkCore.MySql | | 10.0.3 | +| Serilog.Extensions.Logging | 9.0.1 | 9.0.2 | +| DocumentFormat.OpenXml | | 3.5.1 | +| MiniExcel | 1.42.0 | 1.43.0 | +| MiniWord | | 0.9.2 | +| Scriban | 6.3.0 | 7.0.0 | +| Swashbuckle.AspNetCore | 9.0.4 | 10.0.1 | + + + +## 数据库迁移 + +| Product | Scripts | ProductVersion | +| ------------------------------------------ | --------- | ------ | +| AdminService | 20260403034826_Upgrade-Abp-Framework-To-10-2-0 | 10.2.0 | +| Elsa2 | 2.16.0 | 2.16.1 | +| Elsa3 | 3.3.5 | 3.6.0 | \ No newline at end of file diff --git a/Directory.Packages.props b/Directory.Packages.props index 7a4bd2817..b9d54b3e0 100644 --- a/Directory.Packages.props +++ b/Directory.Packages.props @@ -1,19 +1,19 @@ 10.0.0 - 2.16.0 - 3.3.5 - 10.0.2 - 10.0.2 - 10.0.0 - 10.0.0 - 10.0.0 + 2.16.1 + 3.6.0 + 10.2.0 + 10.2.0 + 10.0.2 + 10.0.2 + 10.0.2 13.1.0 true - + @@ -164,7 +164,7 @@ - + @@ -183,9 +183,10 @@ - + + @@ -234,6 +235,10 @@ + + + + @@ -261,7 +266,7 @@ - + @@ -330,6 +335,7 @@ + @@ -344,7 +350,8 @@ - + + @@ -360,7 +367,7 @@ - + @@ -369,7 +376,7 @@ - + diff --git a/aspnet-core/LINGYUN.MicroService.All.sln b/aspnet-core/LINGYUN.MicroService.All.sln deleted file mode 100644 index e8de430b4..000000000 --- a/aspnet-core/LINGYUN.MicroService.All.sln +++ /dev/null @@ -1,2629 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{C5CAD011-DF84-4914-939C-0C029DCEF26F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "services", "services", "{672E1170-7B18-474B-85C7-1961BF2A48AE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{77BDEF2B-1A30-4E64-BC35-0DFC21091327}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{573B7B0E-3065-42DE-A391-EE026CE7A366}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server-api", "identity-server-api", "{E2408063-FB1F-4513-B4A7-1FE50667C6E8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{0439B173-F41E-4CE0-A44A-CCB70328F272}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{A584D040-95AC-4422-93FF-7B80532213F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{76249548-4344-4CD0-A0AC-12AC54184B58}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{A5543E56-DA53-494D-A531-DA75091D46FF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{E5D1B78A-1A8F-4D52-BF99-A4A863ADE898}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{8AC72641-30D3-4ACF-89FA-808FADC55C2E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{AEC1E6D3-DC23-41BD-B456-3AAD26E34978}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9E72FEB9-A626-4312-892B-CDD043879758}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{8B09385A-719C-4B83-B61E-0ECD5D2734BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{8E569C1C-2637-4D89-804C-50FBC83948FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "framework\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{FF1839EA-FB6B-4ED5-9804-E40427046D35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "framework\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "framework\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{6E4A0D87-C3CE-430F-A475-A6B68C116D96}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-message", "realtime-message", "{3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{A5851F0F-CB0D-4E29-A829-D1BDEADB807B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{FDEECE0D-6F66-4053-948E-9AC021B97C8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\realtime-message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{371B293B-0CA9-4385-8EBB-5224332066D2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-message", "realtime-message", "{608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\realtime-message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "framework\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "framework\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{F595CB9F-B117-4D62-A1AE-48599927DB36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "framework\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{5CF403B2-47C9-4E4E-8856-0294BDD64884}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "framework\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{059473BA-FAF9-405F-9985-33DDCA2E9F0D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun.Tests", "tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests.csproj", "{C8A00439-5B8D-4923-8FAA-AB75E2A786ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{31B03DCB-ED12-4412-867A-61E347D40D8C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\realtime-message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{AB984240-EF03-416F-A9B2-F5CF169E04B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Client", "modules\realtime-message\LINGYUN.Abp.MessageService.HttpApi.Client\LINGYUN.Abp.MessageService.HttpApi.Client.csproj", "{EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{65DDA934-B76B-4018-A565-CF6CEF0D6BB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{376D8343-DF83-41D2-BF6E-2F5DC8DBF259}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing.Tests", "tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests.csproj", "{6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "framework\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{1DA91161-8757-4A68-A0A1-8C94C36C9240}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F4923692-D343-4318-AECA-96F580B1A563}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{F135B9E8-3FFE-44E9-835B-7B6A928F4823}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{75A6D078-C19D-4030-88CC-C2A8608FF604}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{2D895594-3FF5-4507-853A-CB65F2DB72ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{0655A0FB-59E8-4A9F-BAF5-47A89377F747}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{F4615BCE-D5C1-407A-8681-8EEE92DEF9D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{F3D9B137-32DE-4018-8058-78AB17FCDF9C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{52B5D4F7-237B-4E0A-A167-68442164F70A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{F19C8B0F-A332-4190-9ABE-95790E0AE864}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{72DCA4CF-8B95-47C9-B02A-2671953B7987}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}" - ProjectSection(SolutionItems) = preProject - modules\oss-management\README.md = modules\oss-management\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{F359AAA1-C854-444A-88F2-1C0D8A07F864}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{5D0ED1FC-3A7C-4531-9512-832E73AD9555}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{2BF7FB73-0C62-4ECF-99F0-0583855D2777}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{6FE7E243-2D99-4567-8786-6C9283D608EF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{685188AC-A145-4A27-BF5F-9C970A59AA9C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "framework\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "framework\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{7071E78B-755B-410A-830B-AA05D7168944}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "framework\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{87B65CBD-0FF4-4FB5-9ABC-161911A71179}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{F40F88F1-CA90-4A79-B772-80E287E25982}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{AC3C8985-73C2-472A-8E76-A0B8786FEC3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "permission-management", "{CC362C67-6FC1-42B3-A130-8120AA8D790C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{BAE74ABC-1096-495F-A624-BEBFBC1896F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E92A1CAA-5758-41EF-B67E-C0D394E85417}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{F18DE651-A3E4-478F-A2B5-686429729EB8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{42309C06-C0F2-490F-931B-CF41FA1970FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-aliyun", "cloud-aliyun", "{14CDBAD1-10C8-464A-B445-1F727C988010}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-tencent", "cloud-tencent", "{3B96F4D8-4993-419B-BCEB-AFE4ED39449F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{97B4A37E-B93E-48C9-95D5-689CB9495D8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{35B17218-9FB6-439E-AF73-9A1454BC923C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent.Tests", "tests\LINGYUN.Abp.Location.Tencent.Tests\LINGYUN.Abp.Location.Tencent.Tests.csproj", "{94B47385-E47F-4FD7-A3A9-A7AA122EFC93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu.Tests", "tests\LINGYUN.Abp.Location.Baidu.Tests\LINGYUN.Abp.Location.Baidu.Tests.csproj", "{C892CD81-50AE-49E5-BF44-A0C28A1614CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Client", "framework\common\LINGYUN.Abp.AspNetCore.Mvc.Client\LINGYUN.Abp.AspNetCore.Mvc.Client.csproj", "{EEF03CC6-1013-4AAF-BEED-BB4BA5021039}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{90E88EAC-4291-4406-8D88-EFDF61B11292}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml", "framework\localization\LINGYUN.Abp.Localization.Xml\LINGYUN.Abp.Localization.Xml.csproj", "{84868710-ECBB-4025-900A-EEB99EC49534}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml.Tests", "tests\LINGYUN.Abp.Localization.Xml.Tests\LINGYUN.Abp.Localization.Xml.Tests.csproj", "{A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{D3BAA44E-8395-4E8A-AA96-6B463356C537}" - ProjectSection(SolutionItems) = preProject - modules\localization-management\README.md = modules\localization-management\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{5BE18D72-0D02-4854-966E-745CE5DAF77F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{73EAD4FE-B44F-44A7-904E-FFA5096D91BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application.Contracts", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj", "{06D34108-01BA-4C77-A704-4DD9E6F7E32C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application\LINGYUN.Abp.LocalizationManagement.Application.csproj", "{A98C939C-9F48-414A-A2D3-853BE4447397}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{A94BE05F-7DAB-461C-93E7-914CBDF4FA93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj", "{FBE91498-D83B-4873-A67E-0FB9D1C366F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules", "rules", "{6084D52D-775B-4A39-8CD5-AA2F362B5A61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules", "framework\rules\LINGYUN.Abp.Rules\LINGYUN.Abp.Rules.csproj", "{D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules", "framework\rules\LINGYUN.Abp.Rules.NRules\LINGYUN.Abp.Rules.NRules.csproj", "{34BB9810-2983-4E55-A96A-132D32310145}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine", "framework\rules\LINGYUN.Abp.Rules.RulesEngine\LINGYUN.Abp.Rules.RulesEngine.csproj", "{4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine.Tests", "tests\LINGYUN.Abp.Rules.RulesEngine.Tests\LINGYUN.Abp.Rules.RulesEngine.Tests.csproj", "{8EF31071-3521-409D-9740-BBFBFC04C50E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{13219C1C-23E1-4EBA-93FB-86830C93A800}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundWorkers.Hangfire", "framework\common\LINGYUN.Abp.BackgroundWorkers.Hangfire\LINGYUN.Abp.BackgroundWorkers.Hangfire.csproj", "{60D0BEF2-FEAF-4066-8377-6C873CB24858}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Dashboard", "framework\common\LINGYUN.Abp.Hangfire.Dashboard\LINGYUN.Abp.Hangfire.Dashboard.csproj", "{340BE5AC-68EC-41A5-9D0D-266037C58F13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat", "framework\wechat\LINGYUN.Abp.Identity.WeChat\LINGYUN.Abp.Identity.WeChat.csproj", "{BC518F26-996E-4DF0-BB44-783EB1C275D2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elasticsearch", "elasticsearch", "{B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{63D1DC91-C7C7-491A-8423-B0B89F39443F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging", "framework\logging\LINGYUN.Abp.Logging\LINGYUN.Abp.Logging.csproj", "{1E0E82D2-F53A-4326-9E39-D7D677590543}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging.Serilog.Elasticsearch", "framework\logging\LINGYUN.Abp.Logging.Serilog.Elasticsearch\LINGYUN.Abp.Logging.Serilog.Elasticsearch.csproj", "{D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{6C3D4C1C-4864-44A9-8649-9856ABF667FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.EntityFrameworkCore", "framework\auditing\LINGYUN.Abp.AuditLogging.EntityFrameworkCore\LINGYUN.Abp.AuditLogging.EntityFrameworkCore.csproj", "{F71A0D28-397D-4094-B1C2-7925E1310676}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{CEAF0044-28D3-4585-B69D-D65FF6D4745E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "navigation", "navigation", "{7D02D803-F9A9-492C-9B5E-454E4B258466}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation", "framework\navigation\LINGYUN.Abp.UI.Navigation\LINGYUN.Abp.UI.Navigation.csproj", "{FD04A084-BB8A-4733-B9C5-FACF40342A8A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin\LINGYUN.Abp.UI.Navigation.VueVbenAdmin.csproj", "{67A76560-D39F-4D49-B858-B476E1DFE37B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{DC33925B-264D-421B-96CC-46F853CBCC70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{93317D44-835C-4F5E-B85D-580D51D5FFF4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors", "framework\dapr\LINGYUN.Abp.Dapr.Actors\LINGYUN.Abp.Dapr.Actors.csproj", "{DAF80936-FBEC-45AB-92DF-34966B0148FD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore\LINGYUN.Abp.Dapr.Actors.AspNetCore.csproj", "{995756A1-A379-4797-89F0-87D219B5AF00}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{EB73D2CC-B1BE-471A-B76E-35F288CD0E16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.BackendAdmin.HttpApi.Host", "services\LY.MicroService.BackendAdmin.HttpApi.Host\LY.MicroService.BackendAdmin.HttpApi.Host.csproj", "{3811B6AE-D86C-429D-AE37-B34AE31B7174}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer", "services\LY.MicroService.IdentityServer\LY.MicroService.IdentityServer.csproj", "{6DB63EC6-0278-4DBA-A999-768481018B70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer.HttpApi.Host", "services\LY.MicroService.IdentityServer.HttpApi.Host\LY.MicroService.IdentityServer.HttpApi.Host.csproj", "{B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.LocalizationManagement.HttpApi.Host", "services\LY.MicroService.LocalizationManagement.HttpApi.Host\LY.MicroService.LocalizationManagement.HttpApi.Host.csproj", "{8BB50CB6-1E99-4617-B8A6-EABDED67405D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.PlatformManagement.HttpApi.Host", "services\LY.MicroService.PlatformManagement.HttpApi.Host\LY.MicroService.PlatformManagement.HttpApi.Host.csproj", "{A200E783-CBA2-4F64-A6EC-49D5C6482DEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.RealtimeMessage.HttpApi.Host", "services\LY.MicroService.RealtimeMessage.HttpApi.Host\LY.MicroService.RealtimeMessage.HttpApi.Host.csproj", "{A17C9F1D-457A-48AC-B89C-722D8B3955DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Client.Wrapper\LINGYUN.Abp.Dapr.Client.Wrapper.csproj", "{842E19B3-8110-40FE-AAFF-D288BC928E55}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{C1319EC1-A489-482B-A343-38B52D8AB0B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "open-api", "open-api", "{3C7A8246-DE82-4330-8697-24EF1B1C515D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi", "framework\open-api\LINGYUN.Abp.OpenApi\LINGYUN.Abp.OpenApi.csproj", "{4059F87E-9762-46C1-AEB1-B1128EA533AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.Authorization", "framework\open-api\LINGYUN.Abp.OpenApi.Authorization\LINGYUN.Abp.OpenApi.Authorization.csproj", "{433AD1FB-2DE8-479F-B89E-A17217591538}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{65311EC9-7A86-4E73-A587-F06A99474EDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.OssManagement", "modules\oss-management\LINGYUN.Abp.BlobStoring.OssManagement\LINGYUN.Abp.BlobStoring.OssManagement.csproj", "{CD9081C6-7CA0-4A93-9318-33E54F3ED275}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi.Client", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi.Client\LINGYUN.Abp.OssManagement.HttpApi.Client.csproj", "{D262405E-1C72-4F14-A799-40471BAD48DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{529DF802-97C4-4BF2-BE7C-39663B3D9EA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection", "framework\data-protection\LINGYUN.Abp.DataProtection\LINGYUN.Abp.DataProtection.csproj", "{BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.EntityFrameworkCore", "framework\data-protection\LINGYUN.Abp.DataProtection.EntityFrameworkCore\LINGYUN.Abp.DataProtection.EntityFrameworkCore.csproj", "{19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator", "framework\common\LINGYUN.Abp.IdGenerator\LINGYUN.Abp.IdGenerator.csproj", "{440C9BD9-85EA-4473-AB1C-7C3562DF4915}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{23C3B247-523A-4FBF-B785-2F035E0089BD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{A76A4741-AF91-44EF-A7B6-8E7AF4961146}" - ProjectSection(SolutionItems) = preProject - ..\common.props = ..\common.props - ..\common.secrets.props = ..\common.secrets.props - ..\configureawait.props = ..\configureawait.props - ..\Directory.Build.props = ..\Directory.Build.props - ..\Directory.Packages.props = ..\Directory.Packages.props - ..\NuGet.Config = ..\NuGet.Config - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.SettingManagement", "framework\cloud-tencent\LINGYUN.Abp.Tencent.SettingManagement\LINGYUN.Abp.Tencent.SettingManagement.csproj", "{C7CF4193-6397-4450-AF42-3BACD7CF292E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Sms.Tencent\LINGYUN.Abp.Sms.Tencent.csproj", "{8FE2725C-6829-4778-93BA-A53260697AFB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Tencent", "framework\cloud-tencent\LINGYUN.Abp.BlobStoring.Tencent\LINGYUN.Abp.BlobStoring.Tencent.csproj", "{A4B972EC-9F0B-4405-9965-766FABC9B07E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Tencent", "modules\oss-management\LINGYUN.Abp.OssManagement.Tencent\LINGYUN.Abp.OssManagement.Tencent.csproj", "{31E60E23-FD98-4D5E-A137-2B3F2968BA09}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.LinkUser", "modules\identityServer\LINGYUN.Abp.IdentityServer.LinkUser\LINGYUN.Abp.IdentityServer.LinkUser.csproj", "{25378F9D-2A66-4568-AAC6-E9282ACA3DD3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.QQ", "framework\cloud-tencent\LINGYUN.Abp.Tencent.QQ\LINGYUN.Abp.Tencent.QQ.csproj", "{3FCB1BCD-34BC-4F66-968F-38DB28371D0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{A030CD8E-61F3-4C15-B28A-C301446DDBEC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{D01D859E-4B72-478A-BABD-90F0981652D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{049E09BF-2E11-4E3B-926D-9DD6051A2DA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{F1BE6113-3439-45BB-8B58-20ACA4056895}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{77C2E24A-D143-44E7-86F9-AB6C5D444F63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application.Contracts", "modules\saas\LINGYUN.Abp.Saas.Application.Contracts\LINGYUN.Abp.Saas.Application.Contracts.csproj", "{D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application", "modules\saas\LINGYUN.Abp.Saas.Application\LINGYUN.Abp.Saas.Application.csproj", "{B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.HttpApi", "modules\saas\LINGYUN.Abp.Saas.HttpApi\LINGYUN.Abp.Saas.HttpApi.csproj", "{8DF50094-6791-4C7C-B07D-C3E995B69C49}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.HttpApi.Client", "modules\saas\LINGYUN.Abp.Saas.HttpApi.Client\LINGYUN.Abp.Saas.HttpApi.Client.csproj", "{96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhooks", "webhooks", "{13ACF670-F109-404E-B252-2FA34A4EA061}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebHooks", "modules\webhooks\LINGYUN.Abp.WebHooks\LINGYUN.Abp.WebHooks.csproj", "{91AE01B1-CC82-40E2-8290-B8A84C6E90D1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{9EC33D45-CCC7-41DF-829E-6B89A640FE35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{902D822A-52B6-481C-96C5-ECD891FF83FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits.csproj", "{46244C99-3A0D-4D88-9F24-2B7B586ADBA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.OrganizaztionUnits", "modules\identity\LINGYUN.Abp.Identity.OrganizaztionUnits\LINGYUN.Abp.Identity.OrganizaztionUnits.csproj", "{76A5564E-033B-4AA6-A22B-78B6EB134CC6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Theme.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Theme.VueVbenAdmin\LINGYUN.Platform.Theme.VueVbenAdmin.csproj", "{67DC7FA0-506A-4977-95F6-BC739B2BC4BA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Settings.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Settings.VueVbenAdmin\LINGYUN.Platform.Settings.VueVbenAdmin.csproj", "{8DF55DAB-4C1D-46F7-9324-0050F47B3BED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "text-templating", "text-templating", "{ABD89F39-62D9-439E-8662-BE4F36BFA04F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain.Shared", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain.Shared\LINGYUN.Abp.TextTemplating.Domain.Shared.csproj", "{D4B4800F-6238-4EA9-A9BB-298D668C26C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain\LINGYUN.Abp.TextTemplating.Domain.csproj", "{F9AC4123-7987-47D3-85D6-CD13928F3683}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application.Contracts", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application.Contracts\LINGYUN.Abp.TextTemplating.Application.Contracts.csproj", "{22BDDF5C-F911-4978-B83F-981F3652BF45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application\LINGYUN.Abp.TextTemplating.Application.csproj", "{0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.HttpApi", "modules\text-templating\LINGYUN.Abp.TextTemplating.HttpApi\LINGYUN.Abp.TextTemplating.HttpApi.csproj", "{4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.EntityFrameworkCore", "modules\text-templating\LINGYUN.Abp.TextTemplating.EntityFrameworkCore\LINGYUN.Abp.TextTemplating.EntityFrameworkCore.csproj", "{130F8ED1-A64F-48DE-BF43-18EAD19CAF63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.HttpApi.Client", "modules\text-templating\LINGYUN.Abp.TextTemplating.HttpApi.Client\LINGYUN.Abp.TextTemplating.HttpApi.Client.csproj", "{A53FE09E-6B1C-46C0-9422-C313D14AE9E4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{995DB1CE-A2FC-4468-A521-4207FD587EC5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching-management", "caching-management", "{63FCC71F-1CEF-44D3-B95B-23EE58DE8C95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Domain", "modules\caching-management\LINGYUN.Abp.CachingManagement.Domain\LINGYUN.Abp.CachingManagement.Domain.csproj", "{7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.StackExchangeRedis", "modules\caching-management\LINGYUN.Abp.CachingManagement.StackExchangeRedis\LINGYUN.Abp.CachingManagement.StackExchangeRedis.csproj", "{920867B4-4740-4074-9B49-14002B272A63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application.Contracts", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application.Contracts\LINGYUN.Abp.CachingManagement.Application.Contracts.csproj", "{3D422738-B111-4DEE-82E1-C3A90F1133B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application\LINGYUN.Abp.CachingManagement.Application.csproj", "{08CC528E-98D7-41D9-957D-9F9064645788}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.HttpApi", "modules\caching-management\LINGYUN.Abp.CachingManagement.HttpApi\LINGYUN.Abp.CachingManagement.HttpApi.csproj", "{B507D18B-770E-4581-854B-15579AC7074F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLocking.Dapr", "framework\dapr\LINGYUN.Abp.DistributedLocking.Dapr\LINGYUN.Abp.DistributedLocking.Dapr.csproj", "{178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx-pusher", "wx-pusher", "{53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher", "framework\wx-pusher\LINGYUN.Abp.WxPusher\LINGYUN.Abp.WxPusher.csproj", "{7C4C266C-DC2A-4A48-AB87-185E284B86E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WxPusher", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WxPusher\LINGYUN.Abp.Notifications.WxPusher.csproj", "{0380623A-EC74-430B-AA59-A6D23BC5E108}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher.SettingManagement", "framework\wx-pusher\LINGYUN.Abp.WxPusher.SettingManagement\LINGYUN.Abp.WxPusher.SettingManagement.csproj", "{C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WxPusher", "framework\wx-pusher\LINGYUN.Abp.Identity.WxPusher\LINGYUN.Abp.Identity.WxPusher.csproj", "{C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pushplus", "pushplus", "{A8F1C9FA-4F16-43F9-8CC6-CCD124154440}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus", "framework\pushplus\LINGYUN.Abp.PushPlus\LINGYUN.Abp.PushPlus.csproj", "{82CB7E17-ED5A-4D26-B116-BA7B4226E43C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus.SettingManagement", "framework\pushplus\LINGYUN.Abp.PushPlus.SettingManagement\LINGYUN.Abp.PushPlus.SettingManagement.csproj", "{102C3711-135E-446D-9A35-AEFB79993CAA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.PushPlus", "modules\realtime-notifications\LINGYUN.Abp.Notifications.PushPlus\LINGYUN.Abp.Notifications.PushPlus.csproj", "{2B7C1441-8801-4121-ABFB-03771E9DFE46}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{ECC8B9A9-9E92-4493-984D-2E350A49189D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{942816E3-B270-40DC-9532-C1077FF59A32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper.csproj", "{FBB50072-33BE-4B4A-8908-E98BC0C80B92}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "openiddict", "openiddict", "{83E698F6-F8CD-4604-AB80-01A203389501}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application.Contracts", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application.Contracts\LINGYUN.Abp.OpenIddict.Application.Contracts.csproj", "{D509011F-4690-4F21-BA30-E4C31799993F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application\LINGYUN.Abp.OpenIddict.Application.csproj", "{257C64BC-BD16-4F6D-A0B9-E286A4161241}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.HttpApi", "modules\openIddict\LINGYUN.Abp.OpenIddict.HttpApi\LINGYUN.Abp.OpenIddict.HttpApi.csproj", "{785251E2-6E77-40E3-90C2-4DFB63D0721B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.HttpApi.Client", "modules\openIddict\LINGYUN.Abp.OpenIddict.HttpApi.Client\LINGYUN.Abp.OpenIddict.HttpApi.Client.csproj", "{0521239A-6B83-414F-B3E2-0515FC70F121}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Dapr.Client", "modules\openIddict\LINGYUN.Abp.OpenIddict.Dapr.Client\LINGYUN.Abp.OpenIddict.Dapr.Client.csproj", "{44E33132-9427-4E52-B105-67A8BC2BC29E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authentication", "authentication", "{E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.QQ", "framework\authentication\LINGYUN.Abp.Authentication.QQ\LINGYUN.Abp.Authentication.QQ.csproj", "{D3008465-B344-4243-B14A-A1430E2BEC48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.WeChat", "framework\authentication\LINGYUN.Abp.Authentication.WeChat\LINGYUN.Abp.Authentication.WeChat.csproj", "{3CBA6005-B412-4D2A-8F1E-01D53D5C657E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auth-server", "auth-server", "{9DEBD2BE-B7B6-49BF-8726-CD92C1163323}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auth-server-api", "auth-server-api", "{34C664D3-416E-4639-B25A-8D8F434F9CB8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.AuthServer", "services\LY.MicroService.AuthServer\LY.MicroService.AuthServer.csproj", "{A8DE7E8A-700F-4FC4-8BD6-96879F24170F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.AuthServer.HttpApi.Host", "services\LY.MicroService.AuthServer.HttpApi.Host\LY.MicroService.AuthServer.HttpApi.Host.csproj", "{84BDF841-2487-43BA-831E-2854FEBA7D29}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.LinkUser", "modules\openIddict\LINGYUN.Abp.OpenIddict.LinkUser\LINGYUN.Abp.OpenIddict.LinkUser.csproj", "{15EC4A03-D172-4984-B9CA-2C73929838DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Sms", "modules\openIddict\LINGYUN.Abp.OpenIddict.Sms\LINGYUN.Abp.OpenIddict.Sms.csproj", "{74C13BCC-A5A5-40FA-81E8-83DCCF760148}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat\LINGYUN.Abp.OpenIddict.WeChat.csproj", "{427382F6-3153-47A2-BBC4-88F6EA116A8F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator.Tests", "tests\LINGYUN.Abp.IdGenerator.Tests\LINGYUN.Abp.IdGenerator.Tests.csproj", "{2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Senparc", "framework\wechat\LINGYUN.Abp.WeChat.Official.Senparc\LINGYUN.Abp.WeChat.Official.Senparc.csproj", "{CA8D7141-9520-46AC-83FD-6E034AD6EBDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Core", "modules\webhooks\LINGYUN.Abp.Webhooks.Core\LINGYUN.Abp.Webhooks.Core.csproj", "{42FD76A3-803A-4E07-8A90-4269204B7B87}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{C90A505F-000E-4AE4-8CCD-AB5FE5092B5C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin", "admin", "{E12DFE37-3F4D-435D-97AE-903259AE2DF4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auth-server", "auth-server", "{D724FDCC-375A-4D61-A444-4264A00A6AC9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{B2493730-4DDC-4DA7-BF19-CACD75450270}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{B18CF0D3-3D01-4A64-A9C4-DC0C214BEE42}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F260FB5F-C6C7-4948-B638-E4D6986D07ED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-message", "realtime-message", "{B1AC656F-8F4C-43D5-B5A0-CCF5F119EA44}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.BackendAdmin.DbMigrator", "migrations\LY.MicroService.BackendAdmin.DbMigrator\LY.MicroService.BackendAdmin.DbMigrator.csproj", "{EA144C64-CE14-40DF-A876-5D302A4FC208}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.AuthServer.DbMigrator", "migrations\LY.MicroService.AuthServer.DbMigrator\LY.MicroService.AuthServer.DbMigrator.csproj", "{D25156E6-532F-4BCC-8EE0-8A3F1986E10E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer.DbMigrator", "migrations\LY.MicroService.IdentityServer.DbMigrator\LY.MicroService.IdentityServer.DbMigrator.csproj", "{F5CCC079-8A6C-45E2-BA9D-09B31E072A57}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.LocalizationManagement.DbMigrator", "migrations\LY.MicroService.LocalizationManagement.DbMigrator\LY.MicroService.LocalizationManagement.DbMigrator.csproj", "{869C267D-D659-4DC6-AD64-6B466611FA61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.Platform.DbMigrator", "migrations\LY.MicroService.Platform.DbMigrator\LY.MicroService.Platform.DbMigrator.csproj", "{DB417421-B5E7-499B-A19A-C04830BFF75F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.RealtimeMessage.DbMigrator", "migrations\LY.MicroService.RealtimeMessage.DbMigrator\LY.MicroService.RealtimeMessage.DbMigrator.csproj", "{F51EFCF5-812A-4BBC-AC88-82372B3CF78D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-notifications", "realtime-notifications", "{1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain.Shared", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain.Shared\LINGYUN.Abp.Notifications.Domain.Shared.csproj", "{4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain\LINGYUN.Abp.Notifications.Domain.csproj", "{CDD4CC0F-5493-40C2-B889-3670263888D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.EntityFrameworkCore", "modules\realtime-notifications\LINGYUN.Abp.Notifications.EntityFrameworkCore\LINGYUN.Abp.Notifications.EntityFrameworkCore.csproj", "{F74AAE01-7B87-44CA-85ED-9A6307D51504}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application.Contracts", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application.Contracts\LINGYUN.Abp.Notifications.Application.Contracts.csproj", "{E3F010C7-6C96-4EEA-B5FA-BF80515E195F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application\LINGYUN.Abp.Notifications.Application.csproj", "{B153F98A-7DA9-4A12-A1D7-105BE9408FA1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.HttpApi", "modules\realtime-notifications\LINGYUN.Abp.Notifications.HttpApi\LINGYUN.Abp.Notifications.HttpApi.csproj", "{EFC5C34F-81A1-4EFC-966F-50B646C54FA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{52E60F16-6304-4E37-A220-C94D8C5D27DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{F3E04039-7BEE-46F8-B33B-FE13E977DCCA}" - ProjectSection(SolutionItems) = preProject - ..\.github\workflows\build.yml = ..\.github\workflows\build.yml - ..\.github\workflows\publish.yml = ..\.github\workflows\publish.yml - ..\.github\workflows\release.yml = ..\.github\workflows\release.yml - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.BackendAdmin.EntityFrameworkCore", "migrations\LY.MicroService.BackendAdmin.EntityFrameworkCore\LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj", "{742913C8-F10F-4B5E-AAE5-A52800F080BB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.AuthServer.EntityFrameworkCore", "migrations\LY.MicroService.AuthServer.EntityFrameworkCore\LY.MicroService.AuthServer.EntityFrameworkCore.csproj", "{730CC41B-99F7-4A1B-A645-093494ECEBC1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer.EntityFrameworkCore", "migrations\LY.MicroService.IdentityServer.EntityFrameworkCore\LY.MicroService.IdentityServer.EntityFrameworkCore.csproj", "{F74D8A4E-737F-4144-94BF-9EE80AFC8E9B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.LocalizationManagement.EntityFrameworkCore", "migrations\LY.MicroService.LocalizationManagement.EntityFrameworkCore\LY.MicroService.LocalizationManagement.EntityFrameworkCore.csproj", "{7DBC2821-22B2-497F-A594-18CF3EE79940}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.Platform.EntityFrameworkCore", "migrations\LY.MicroService.Platform.EntityFrameworkCore\LY.MicroService.Platform.EntityFrameworkCore.csproj", "{B9421FC5-47EB-428D-92C6-F688D02ABE06}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.RealtimeMessage.EntityFrameworkCore", "migrations\LY.MicroService.RealtimeMessage.EntityFrameworkCore\LY.MicroService.RealtimeMessage.EntityFrameworkCore.csproj", "{6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application.Contracts", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application.Contracts\LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj", "{35D17AF3-FDCD-4704-969C-E82DBCC0A232}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application\LINGYUN.Abp.PermissionManagement.Application.csproj", "{984F481B-79FF-4825-917B-944F151694BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.HttpApi", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.HttpApi\LINGYUN.Abp.PermissionManagement.HttpApi.csproj", "{B12BECC4-8A58-4DBD-A5CD-144A507972BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "feature-management", "feature-management", "{12896A3F-5F7E-4192-8A58-E1D2527109D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application.Contracts", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application.Contracts\LINGYUN.Abp.FeatureManagement.Application.Contracts.csproj", "{F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application\LINGYUN.Abp.FeatureManagement.Application.csproj", "{4E8DA436-8FAF-4028-8A0C-E4EEB3615972}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.HttpApi", "modules\feature-management\LINGYUN.Abp.FeatureManagement.HttpApi\LINGYUN.Abp.FeatureManagement.HttpApi.csproj", "{405694F8-0051-4DAE-A991-919FAC36C7DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules-management", "rules-management", "{5F0BB690-0FBB-455A-AE9A-8BA914AA78F6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules-engine", "rules-engine", "{F7103498-8B5B-4698-AACE-9E949F732E77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Domain.Shared", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Domain.Shared\LINGYUN.Abp.RulesEngineManagement.Domain.Shared.csproj", "{2EAA690B-1395-4952-95A0-A52F929028C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Domain", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Domain\LINGYUN.Abp.RulesEngineManagement.Domain.csproj", "{722FE012-8F23-4558-9E8F-A37C02902058}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Application.Contracts", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Application.Contracts\LINGYUN.Abp.RulesEngineManagement.Application.Contracts.csproj", "{79D3C6D6-6433-471D-B354-477E07CB08EE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Application", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Application\LINGYUN.Abp.RulesEngineManagement.Application.csproj", "{5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore\LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore.csproj", "{4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.HttpApi", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.HttpApi\LINGYUN.Abp.RulesEngineManagement.HttpApi.csproj", "{97062425-3379-4F8D-BFA2-D445C56C0801}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Portal", "modules\identityServer\LINGYUN.Abp.IdentityServer.Portal\LINGYUN.Abp.IdentityServer.Portal.csproj", "{5B20BA13-40FF-4743-AEEE-2E3F887F50C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Portal", "modules\openIddict\LINGYUN.Abp.OpenIddict.Portal\LINGYUN.Abp.OpenIddict.Portal.csproj", "{03EC70B8-912C-4FBE-94DD-6327F4F23021}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa", "elsa", "{0A00FAF9-A96B-4BF5-8D42-15C8678F70F3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa", "modules\elsa\LINGYUN.Abp.Elsa\LINGYUN.Abp.Elsa.csproj", "{C037F0CE-8223-4D4A-B15F-18B7D6AA447F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities", "modules\elsa\LINGYUN.Abp.Elsa.Activities\LINGYUN.Abp.Elsa.Activities.csproj", "{E293BB96-5054-497B-BCE5-64AF9B0457B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.BlobStoring", "modules\elsa\LINGYUN.Abp.Elsa.Activities.BlobStoring\LINGYUN.Abp.Elsa.Activities.BlobStoring.csproj", "{FB7AF3F8-44CD-4732-8A25-A43902437B89}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Emailing", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Emailing\LINGYUN.Abp.Elsa.Activities.Emailing.csproj", "{6472B3C1-C237-49CD-82C8-821AD001096A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.IM", "modules\elsa\LINGYUN.Abp.Elsa.Activities.IM\LINGYUN.Abp.Elsa.Activities.IM.csproj", "{4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Notifications\LINGYUN.Abp.Elsa.Activities.Notifications.csproj", "{FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Sms", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Sms\LINGYUN.Abp.Elsa.Activities.Sms.csproj", "{47D57848-A910-4869-8A46-84E40A985FEE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Webhooks", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Webhooks\LINGYUN.Abp.Elsa.Activities.Webhooks.csproj", "{8A1F9647-B773-40AB-9126-30868014AE58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore\LINGYUN.Abp.Elsa.EntityFrameworkCore.csproj", "{4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj", "{10CF8240-4276-4199-B3D1-C45F16468EBD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Notifications\LINGYUN.Abp.Elsa.Notifications.csproj", "{39DFEFCD-7C73-450F-9A2F-7426188A890B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Server", "modules\elsa\LINGYUN.Abp.Elsa.Server\LINGYUN.Abp.Elsa.Server.csproj", "{C465BB41-9DB7-470F-BC7F-A59D2A7D6083}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "entity-change", "entity-change", "{DD1B10ED-73E2-41BE-928A-46501050FE2A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.Application.Contracts", "framework\entity-change\LINGYUN.Abp.EntityChange.Application.Contracts\LINGYUN.Abp.EntityChange.Application.Contracts.csproj", "{7779D9BD-5928-49A2-965F-537967004238}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.Application", "framework\entity-change\LINGYUN.Abp.EntityChange.Application\LINGYUN.Abp.EntityChange.Application.csproj", "{AC41F335-E240-47E0-B409-AFAD1400E626}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.HttpApi", "framework\entity-change\LINGYUN.Abp.EntityChange.HttpApi\LINGYUN.Abp.EntityChange.HttpApi.csproj", "{1D420BA6-2155-4E0D-AAAF-EECC0330A38C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cli", "cli", "{59627844-A66A-46AC-B882-E8F302D0EC24}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Cli", "framework\cli\LINGYUN.Abp.Cli\LINGYUN.Abp.Cli.csproj", "{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Tests", "tests\LINGYUN.Abp.WeChat.Work.Tests\LINGYUN.Abp.WeChat.Work.Tests.csproj", "{9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application.Contracts\LINGYUN.Abp.WeChat.Work.Application.Contracts.csproj", "{B4C8056F-7325-4DB1-9F09-A6F37B052192}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj", "{D5AEBB8E-713C-4DD2-BA18-7B0B48489901}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj", "{CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat.Work", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat.Work\LINGYUN.Abp.IdentityServer.WeChat.Work.csproj", "{DEDB69A9-657F-4B8B-81A7-4ADB19664F35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat.Work", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat.Work\LINGYUN.Abp.OpenIddict.WeChat.Work.csproj", "{2C86306D-D626-41F8-BA3C-5C9B4123CE7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.Work", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.Work\LINGYUN.Abp.Notifications.WeChat.Work.csproj", "{2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat.Work", "framework\wechat\LINGYUN.Abp.Identity.WeChat.Work\LINGYUN.Abp.Identity.WeChat.Work.csproj", "{3E32DBDA-1C63-42B4-85D1-E84BBD072D89}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nexus", "nexus", "{87CE2F0B-0469-4C76-B325-00EA7AB94B99}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Nexus", "framework\nexus\LINGYUN.Abp.BlobStoring.Nexus\LINGYUN.Abp.BlobStoring.Nexus.csproj", "{34987F45-8234-428C-AB41-783D42295C32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Nexus.Tests", "tests\LINGYUN.Abp.BlobStoring.Nexus.Tests\LINGYUN.Abp.BlobStoring.Nexus.Tests.csproj", "{227DA969-291B-4749-985C-7A83523B7F53}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sonatype.Nexus", "framework\nexus\LINGYUN.Abp.Sonatype.Nexus\LINGYUN.Abp.Sonatype.Nexus.csproj", "{CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Nexus.Tests", "tests\LINGYUN.Abp.OssManagement.Nexus.Tests\LINGYUN.Abp.OssManagement.Nexus.Tests.csproj", "{F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{D52D5A11-78EF-4154-8298-267738A6715B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exception-handling", "exception-handling", "{11CDB632-9A54-439F-8B68-32B3C775BC3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hangfire", "hangfire", "{C6D62079-B3F5-4006-AA49-3BF12C4805BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wrapper", "wrapper", "{848F6760-9B11-4C9A-9843-9D71DD66D9DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "location", "location", "{6255DBAD-A388-4418-A5EB-C79630786028}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Nexus", "modules\oss-management\LINGYUN.Abp.OssManagement.Nexus\LINGYUN.Abp.OssManagement.Nexus.csproj", "{A025B8D2-5D92-4023-82AB-97A672A5A132}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{E09E476C-9DF8-46AC-848E-4E7635369117}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{E414F7BC-215C-46D0-99EC-CD78EB31FC3C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{8142FB8C-3D32-4062-BD95-B2F61A1A390A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{4155336A-DC06-4885-878D-03AF5DFAF47D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Emailing", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Emailing\LINGYUN.Abp.Notifications.Emailing.csproj", "{ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Jobs", "modules\task-management\LINGYUN.Abp.Notifications.Jobs\LINGYUN.Abp.Notifications.Jobs.csproj", "{1B112FAC-CB57-48B6-A3D5-95456477CB8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\realtime-notifications\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{B84E4D98-0B10-4189-8572-F6F7B4E384B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{E81EC3E4-521F-4C52-8AA0-A783847E764E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Saas", "modules\saas\LINGYUN.Abp.MultiTenancy.Saas\LINGYUN.Abp.MultiTenancy.Saas.csproj", "{49EB2864-B715-47DD-AE47-C5243C656F47}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{A057F430-AD93-49D9-8080-6E074AF05694}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\realtime-notifications\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{68538541-4280-46F5-BA08-99ACA8575615}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "framework\settings\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{F6F93723-5BC3-4D25-A83E-25B41B6D956F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{77ED7922-BF30-4436-8A85-78F812583913}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{109BF321-1BC6-4031-A59B-7B5375EBA8C5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Common", "framework\wechat\LINGYUN.Abp.WeChat.Common\LINGYUN.Abp.WeChat.Common.csproj", "{08A78A69-913B-4C5E-BCE0-739585F82D1E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dynamic-queryable", "dynamic-queryable", "{4FAE314C-36CB-4E3F-85B7-41D0A428B37D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable", "framework\dynamic-queryable\LINGYUN.Linq.Dynamic.Queryable\LINGYUN.Linq.Dynamic.Queryable.csproj", "{B6857FC4-97C2-4E20-B005-1FAABC574B88}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application.Contracts", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts.csproj", "{B6D4AADE-3ABA-45E6-9916-2F8798412549}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application\LINGYUN.Abp.Dynamic.Queryable.Application.csproj", "{86E85013-7C71-4770-9323-18897A64F5B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.HttpApi", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.HttpApi\LINGYUN.Abp.Dynamic.Queryable.HttpApi.csproj", "{014A9583-0EAA-48A4-ACBE-07DC88159E13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Tests", "tests\LINGYUN.Abp.DataProtection.Tests\LINGYUN.Abp.DataProtection.Tests.csproj", "{AAC0C407-B4B9-4E90-99FC-2D793AC229D9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "security", "security", "{9D1302BE-3886-49F8-B0CD-35D2AC1E5A37}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Security", "framework\security\LINGYUN.Abp.Security\LINGYUN.Abp.Security.csproj", "{4C71CA88-0D04-4DDB-8906-B953908B8B8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Jobs", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Jobs\LINGYUN.Abp.BackgroundTasks.Jobs.csproj", "{50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.TaskManagement", "modules\task-management\LINGYUN.Abp.BackgroundTasks.TaskManagement\LINGYUN.Abp.BackgroundTasks.TaskManagement.csproj", "{1E00BE51-A1AE-447D-B6E0-F28EC12B259A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application.Contracts", "modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj", "{61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi.Client", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi.Client\LINGYUN.Abp.TaskManagement.HttpApi.Client.csproj", "{72D54834-7ADF-4B18-A745-FCBBC255073B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{F6A9D966-0022-440B-AE27-564A74CDED48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain.Shared", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain.Shared\LINGYUN.Abp.DataProtectionManagement.Domain.Shared.csproj", "{8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain\LINGYUN.Abp.DataProtectionManagement.Domain.csproj", "{6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore.csproj", "{D73200F6-CBB3-4BA8-B9BF-7110AAF05596}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Wrapper", "framework\common\LINGYUN.Abp.AspNetCore.Wrapper\LINGYUN.Abp.AspNetCore.Wrapper.csproj", "{30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application.Contracts", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application.Contracts\LINGYUN.Abp.DataProtectionManagement.Application.Contracts.csproj", "{40D7A0A3-68BD-431E-A67A-E2A35508D55D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application\LINGYUN.Abp.DataProtectionManagement.Application.csproj", "{8EA8C998-F81A-46E9-8C7E-C944D2503A0A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Abstractions", "framework\data-protection\LINGYUN.Abp.DataProtection.Abstractions\LINGYUN.Abp.DataProtection.Abstractions.csproj", "{47550AB9-FA06-42D6-A4B8-7DD12FE66563}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.HttpApi", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.HttpApi\LINGYUN.Abp.DataProtectionManagement.HttpApi.csproj", "{835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.IdentityServer", "framework\open-api\LINGYUN.Abp.OpenApi.IdentityServer\LINGYUN.Abp.OpenApi.IdentityServer.csproj", "{FDAAAD2E-42A7-44EC-8971-B5277FD6D404}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.OpenIddict", "framework\open-api\LINGYUN.Abp.OpenApi.OpenIddict\LINGYUN.Abp.OpenApi.OpenIddict.csproj", "{ED3DF100-C5DB-4334-A847-118922B28D95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Scriban", "modules\text-templating\LINGYUN.Abp.TextTemplating.Scriban\LINGYUN.Abp.TextTemplating.Scriban.csproj", "{15482834-9242-4D20-9736-9DA571A9A83A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{8A255A72-50FC-460E-9897-FA53F455580B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Common", "framework\wechat\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj", "{CED33625-A034-475B-A4C0-A4E7D1BADD10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{E3BA2413-5755-4F61-9A7C-5D49AE9E7016}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{BF85DB7F-70C2-4804-AA57-FACE204981DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Session", "modules\identityServer\LINGYUN.Abp.IdentityServer.Session\LINGYUN.Abp.IdentityServer.Session.csproj", "{893F7376-0913-43DC-AD3D-40AF5B8F9E3B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.AspNetCore.Session", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.Session\LINGYUN.Abp.Identity.AspNetCore.Session.csproj", "{8826831D-8733-473A-B47B-A30C3732B13D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.AspNetCore.Session", "modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore.Session\LINGYUN.Abp.OpenIddict.AspNetCore.Session.csproj", "{D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Notifications", "modules\identity\LINGYUN.Abp.Identity.Notifications\LINGYUN.Abp.Identity.Notifications.csproj", "{54BBA043-317B-4A4F-B583-513D08BC25A7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{79FA2CBA-2904-4D80-A217-DCC0A38F93C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Official.Handlers\LINGYUN.Abp.WeChat.Official.Handlers.csproj", "{E469F047-6AD0-4D2B-9900-46358DA3BC30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{EB9F1905-1798-4766-8347-A8D2A9DBFAED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio.Tests", "tests\LINGYUN.Abp.OssManagement.Minio.Tests\LINGYUN.Abp.OssManagement.Minio.Tests.csproj", "{CCE5C620-E17A-4EB1-A17A-9F90311B197D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Tests", "tests\LINGYUN.Abp.OssManagement.Domain.Tests\LINGYUN.Abp.OssManagement.Domain.Tests.csproj", "{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.ImageSharp\LINGYUN.Abp.OssManagement.ImageSharp.csproj", "{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj", "{267933BD-BFB8-4906-BA39-DF193B2FD558}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Notifications.HttpApi.Client", "modules\realtime-notifications\LINGYUN.Abp.Notifications.HttpApi.Client\LINGYUN.Abp.Notifications.HttpApi.Client.csproj", "{3CBD1342-C021-49FB-933F-FAC1DAFC7B48}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform", "modules\platform\LINGYUN.Abp.Sms.Platform\LINGYUN.Abp.Sms.Platform.csproj", "{01B86C39-B0C8-48A4-949C-1C63D755B02C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform", "modules\platform\LINGYUN.Abp.Emailing.Platform\LINGYUN.Abp.Emailing.Platform.csproj", "{DD6609C7-07AC-49FD-B588-44E649D0AE6E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform.Tests", "tests\LINGYUN.Abp.Sms.Platform.Tests\LINGYUN.Abp.Sms.Platform.Tests.csproj", "{856B4ACA-BD13-417F-A6E2-0F401F877189}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.HttpApi.Client", "modules\platform\LINGYUN.Platform.HttpApi.Client\LINGYUN.Platform.HttpApi.Client.csproj", "{B52B199C-0E1C-4CE9-B066-71D26F618424}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform.Tests", "tests\LINGYUN.Abp.Emailing.Platform.Tests\LINGYUN.Abp.Emailing.Platform.Tests.csproj", "{80F44B5B-F8FF-47FA-9A77-BE2D176B2721}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gdpr", "gdpr", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Shared", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Shared\LINGYUN.Abp.Gdpr.Domain.Shared.csproj", "{DD365101-E8FC-6516-2883-B9CA024B36FA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain\LINGYUN.Abp.Gdpr.Domain.csproj", "{C330BADD-59A0-A3CD-E839-A0D4C2C636EE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Identity", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Identity\LINGYUN.Abp.Gdpr.Domain.Identity.csproj", "{F1C6C6B6-5B99-5AA6-7F76-27560C111605}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application.Contracts", "modules\gdpr\LINGYUN.Abp.Gdpr.Application.Contracts\LINGYUN.Abp.Gdpr.Application.Contracts.csproj", "{459DA653-F12A-65B5-41EF-A5877B1C38BA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application", "modules\gdpr\LINGYUN.Abp.Gdpr.Application\LINGYUN.Abp.Gdpr.Application.csproj", "{9DD70A99-41A6-8598-553E-2B5AB6277035}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.EntityFrameworkCore", "modules\gdpr\LINGYUN.Abp.Gdpr.EntityFrameworkCore\LINGYUN.Abp.Gdpr.EntityFrameworkCore.csproj", "{016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi\LINGYUN.Abp.Gdpr.HttpApi.csproj", "{F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Encryption.SM4", "framework\security\LINGYUN.Abp.Encryption.SM4\LINGYUN.Abp.Encryption.SM4.csproj", "{AE00DA82-B33A-CAF7-D9CD-D5E26608741B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{F9A0D88F-53AE-4AC7-8E15-163C34386E7C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.IdentityServer", "modules\account\LINGYUN.Abp.Account.Web.IdentityServer\LINGYUN.Abp.Account.Web.IdentityServer.csproj", "{0FF0A04C-B580-4A56-9171-CF2988B5DE5A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OpenIddict", "modules\account\LINGYUN.Abp.Account.Web.OpenIddict\LINGYUN.Abp.Account.Web.OpenIddict.csproj", "{F810C8A8-1256-440F-BAAF-7F3588291963}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.HttpApi.Client", "modules\account\LINGYUN.Abp.Account.HttpApi.Client\LINGYUN.Abp.Account.HttpApi.Client.csproj", "{FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi.Client", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi.Client\LINGYUN.Abp.Gdpr.HttpApi.Client.csproj", "{C95DE287-9D21-4DCD-9281-A060B6D99774}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Web", "modules\gdpr\LINGYUN.Abp.Gdpr.Web\LINGYUN.Abp.Gdpr.Web.csproj", "{96748DAE-D367-48C0-B64E-2F25010EAC4D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exporter", "exporter", "{A4633711-7FB6-411A-8D08-BB9A0A778046}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Core", "framework\exporter\LINGYUN.Abp.Exporter.Core\LINGYUN.Abp.Exporter.Core.csproj", "{5A0063BF-EE72-E688-84C6-9E3CE0616C94}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.MiniExcel", "framework\exporter\LINGYUN.Abp.Exporter.MiniExcel\LINGYUN.Abp.Exporter.MiniExcel.csproj", "{ECE61F58-1AEC-1E4F-1543-76C2242B6F70}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.MagicodesIE.Excel", "framework\exporter\LINGYUN.Abp.Exporter.MagicodesIE.Excel\LINGYUN.Abp.Exporter.MagicodesIE.Excel.csproj", "{B7B63E08-8F62-34F6-FEA5-063267F1FC85}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Auditing.HttpApi.Client", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi.Client\LINGYUN.Abp.Auditing.HttpApi.Client.csproj", "{7C48C1CA-7E53-4261-A477-454DD3A8402C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.AspNetCore", "framework\wechat\LINGYUN.Abp.WeChat.Work.AspNetCore\LINGYUN.Abp.WeChat.Work.AspNetCore.csproj", "{A54344EB-05A7-A405-5368-4A9C0A60B078}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.QrCode", "modules\identity\LINGYUN.Abp.Identity.QrCode\LINGYUN.Abp.Identity.QrCode.csproj", "{7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.AspNetCore.QrCode", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.QrCode\LINGYUN.Abp.Identity.AspNetCore.QrCode.csproj", "{C9266D5D-3860-09C3-F566-489BBB57A534}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tracking", "tracking", "{21542881-C560-4CBB-8AB1-CF757071A057}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.APM", "framework\telemetry\LINGYUN.Abp.Telemetry.APM\LINGYUN.Abp.Telemetry.APM.csproj", "{F3DF1C3E-7319-48B1-81AB-0284853BB567}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{7D7561CB-5059-4F5F-B736-B97195B46A91}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP.Location", "framework\common\LINGYUN.Abp.IP.Location\LINGYUN.Abp.IP.Location.csproj", "{418EE258-2670-29D3-480F-EC0FD07700E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP2Region", "framework\common\LINGYUN.Abp.IP2Region\LINGYUN.Abp.IP2Region.csproj", "{7984F6B6-726F-9F30-3B6F-08A90AD75A7D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AuditLogging.IP.Location", "framework\auditing\LINGYUN.Abp.AuditLogging.IP.Location\LINGYUN.Abp.AuditLogging.IP.Location.csproj", "{D63FEED3-2342-7E96-4121-B0C19CF1EA81}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.DbChecker", "modules\saas\LINGYUN.Abp.Saas.DbChecker\LINGYUN.Abp.Saas.DbChecker.csproj", "{DED16774-635C-D781-4D5B-D1FA56EECF10}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin5", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5.csproj", "{4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OAuth", "modules\account\LINGYUN.Abp.Account.Web.OAuth\LINGYUN.Abp.Account.Web.OAuth.csproj", "{DD11D070-F39E-1C41-1843-AE3ADBE501EF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.OAuth", "modules\account\LINGYUN.Abp.Account.OAuth\LINGYUN.Abp.Account.OAuth.csproj", "{001D0817-1EED-4C04-821E-F815F148EC90}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf", "framework\exporter\LINGYUN.Abp.Exporter.Pdf\LINGYUN.Abp.Exporter.Pdf.csproj", "{546E4417-5409-40F4-A125-E08329DD82BB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf.LibreOffice", "framework\exporter\LINGYUN.Abp.Exporter.Pdf.LibreOffice\LINGYUN.Abp.Exporter.Pdf.LibreOffice.csproj", "{738A72FB-ED83-4127-AA3B-59BF90635F8F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf.SpireLib", "framework\exporter\LINGYUN.Abp.Exporter.Pdf.SpireLib\LINGYUN.Abp.Exporter.Pdf.SpireLib.csproj", "{9950639D-AA4C-4FF1-A65E-9790EB561C8A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Security", "modules\account\LINGYUN.Abp.Account.Security\LINGYUN.Abp.Account.Security.csproj", "{5FA85E8E-3276-43DF-CC93-6A9847905166}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AspNetCore.MultiTenancy", "framework\tenants\LINGYUN.Abp.AspNetCore.MultiTenancy\LINGYUN.Abp.AspNetCore.MultiTenancy.csproj", "{AEEA81D6-B282-93CF-862B-9FCF1A5052F7}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.Build.0 = Release|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.Build.0 = Debug|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.ActiveCfg = Release|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.Build.0 = Release|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.Build.0 = Release|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.Build.0 = Release|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.Build.0 = Release|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.Build.0 = Release|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.Build.0 = Release|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.Build.0 = Release|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.Build.0 = Release|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.Build.0 = Release|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.Build.0 = Release|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.Build.0 = Release|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.Build.0 = Release|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.Build.0 = Release|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.Build.0 = Release|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.Build.0 = Release|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.Build.0 = Release|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.Build.0 = Release|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.Build.0 = Release|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.Build.0 = Release|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.Build.0 = Release|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.Build.0 = Release|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.Build.0 = Release|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.Build.0 = Release|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.Build.0 = Release|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.Build.0 = Release|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.Build.0 = Release|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.Build.0 = Release|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.Build.0 = Debug|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.ActiveCfg = Release|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.Build.0 = Release|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.Build.0 = Release|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.Build.0 = Release|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.Build.0 = Release|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.Build.0 = Release|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.Build.0 = Release|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.Build.0 = Release|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.Build.0 = Release|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.Build.0 = Release|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.Build.0 = Release|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.Build.0 = Release|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.Build.0 = Release|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.Build.0 = Release|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.Build.0 = Release|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.Build.0 = Release|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.Build.0 = Release|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.Build.0 = Release|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.Build.0 = Release|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.Build.0 = Release|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.Build.0 = Release|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.Build.0 = Release|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.Build.0 = Release|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.Build.0 = Release|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.Build.0 = Release|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.Build.0 = Release|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.Build.0 = Release|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.Build.0 = Release|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.Build.0 = Release|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.Build.0 = Release|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.Build.0 = Release|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.Build.0 = Release|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.Build.0 = Release|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.Build.0 = Release|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.Build.0 = Release|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.Build.0 = Release|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.Build.0 = Release|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.Build.0 = Release|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.Build.0 = Release|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.Build.0 = Release|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.Build.0 = Release|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.Build.0 = Release|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.Build.0 = Release|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.Build.0 = Release|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.Build.0 = Release|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.Build.0 = Release|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.Build.0 = Release|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.Build.0 = Release|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.Build.0 = Debug|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.Build.0 = Release|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.Build.0 = Release|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.Build.0 = Release|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.Build.0 = Release|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.Build.0 = Release|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.Build.0 = Release|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.Build.0 = Release|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.Build.0 = Release|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.Build.0 = Release|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.Build.0 = Release|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.Build.0 = Release|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.Build.0 = Release|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.Build.0 = Release|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.Build.0 = Release|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.Build.0 = Release|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Release|Any CPU.Build.0 = Release|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Release|Any CPU.Build.0 = Release|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Release|Any CPU.Build.0 = Release|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Release|Any CPU.Build.0 = Release|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Release|Any CPU.Build.0 = Release|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Release|Any CPU.Build.0 = Release|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Release|Any CPU.Build.0 = Release|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Release|Any CPU.Build.0 = Release|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Release|Any CPU.Build.0 = Release|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Release|Any CPU.Build.0 = Release|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Release|Any CPU.Build.0 = Release|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Release|Any CPU.Build.0 = Release|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Release|Any CPU.Build.0 = Release|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Release|Any CPU.Build.0 = Release|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.Build.0 = Release|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.Build.0 = Release|Any CPU - {3811B6AE-D86C-429D-AE37-B34AE31B7174}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3811B6AE-D86C-429D-AE37-B34AE31B7174}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3811B6AE-D86C-429D-AE37-B34AE31B7174}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3811B6AE-D86C-429D-AE37-B34AE31B7174}.Release|Any CPU.Build.0 = Release|Any CPU - {6DB63EC6-0278-4DBA-A999-768481018B70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6DB63EC6-0278-4DBA-A999-768481018B70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6DB63EC6-0278-4DBA-A999-768481018B70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6DB63EC6-0278-4DBA-A999-768481018B70}.Release|Any CPU.Build.0 = Release|Any CPU - {B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2}.Release|Any CPU.Build.0 = Release|Any CPU - {8BB50CB6-1E99-4617-B8A6-EABDED67405D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BB50CB6-1E99-4617-B8A6-EABDED67405D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BB50CB6-1E99-4617-B8A6-EABDED67405D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BB50CB6-1E99-4617-B8A6-EABDED67405D}.Release|Any CPU.Build.0 = Release|Any CPU - {A200E783-CBA2-4F64-A6EC-49D5C6482DEB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A200E783-CBA2-4F64-A6EC-49D5C6482DEB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A200E783-CBA2-4F64-A6EC-49D5C6482DEB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A200E783-CBA2-4F64-A6EC-49D5C6482DEB}.Release|Any CPU.Build.0 = Release|Any CPU - {A17C9F1D-457A-48AC-B89C-722D8B3955DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A17C9F1D-457A-48AC-B89C-722D8B3955DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A17C9F1D-457A-48AC-B89C-722D8B3955DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A17C9F1D-457A-48AC-B89C-722D8B3955DA}.Release|Any CPU.Build.0 = Release|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Release|Any CPU.Build.0 = Release|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Release|Any CPU.Build.0 = Release|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Release|Any CPU.Build.0 = Release|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Debug|Any CPU.Build.0 = Debug|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Release|Any CPU.ActiveCfg = Release|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Release|Any CPU.Build.0 = Release|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Release|Any CPU.Build.0 = Release|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Release|Any CPU.Build.0 = Release|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Release|Any CPU.Build.0 = Release|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Release|Any CPU.Build.0 = Release|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Release|Any CPU.Build.0 = Release|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Debug|Any CPU.Build.0 = Debug|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Release|Any CPU.ActiveCfg = Release|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Release|Any CPU.Build.0 = Release|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Release|Any CPU.Build.0 = Release|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Release|Any CPU.Build.0 = Release|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Release|Any CPU.Build.0 = Release|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Release|Any CPU.Build.0 = Release|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Release|Any CPU.Build.0 = Release|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Release|Any CPU.Build.0 = Release|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Release|Any CPU.Build.0 = Release|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Release|Any CPU.Build.0 = Release|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Release|Any CPU.Build.0 = Release|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Release|Any CPU.Build.0 = Release|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Release|Any CPU.Build.0 = Release|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Release|Any CPU.Build.0 = Release|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Release|Any CPU.Build.0 = Release|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Release|Any CPU.Build.0 = Release|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Release|Any CPU.Build.0 = Release|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Release|Any CPU.Build.0 = Release|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Release|Any CPU.Build.0 = Release|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Release|Any CPU.Build.0 = Release|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Release|Any CPU.Build.0 = Release|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Release|Any CPU.Build.0 = Release|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Release|Any CPU.Build.0 = Release|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Release|Any CPU.Build.0 = Release|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Release|Any CPU.Build.0 = Release|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Release|Any CPU.Build.0 = Release|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Release|Any CPU.Build.0 = Release|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Release|Any CPU.Build.0 = Release|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Release|Any CPU.Build.0 = Release|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Release|Any CPU.Build.0 = Release|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.Build.0 = Release|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Release|Any CPU.Build.0 = Release|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Release|Any CPU.Build.0 = Release|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Release|Any CPU.Build.0 = Release|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Release|Any CPU.Build.0 = Release|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Release|Any CPU.Build.0 = Release|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Release|Any CPU.Build.0 = Release|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Release|Any CPU.Build.0 = Release|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Release|Any CPU.Build.0 = Release|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Release|Any CPU.Build.0 = Release|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Release|Any CPU.Build.0 = Release|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Release|Any CPU.Build.0 = Release|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Release|Any CPU.Build.0 = Release|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Release|Any CPU.Build.0 = Release|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Release|Any CPU.Build.0 = Release|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Release|Any CPU.Build.0 = Release|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Release|Any CPU.Build.0 = Release|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Debug|Any CPU.Build.0 = Debug|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Release|Any CPU.ActiveCfg = Release|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Release|Any CPU.Build.0 = Release|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Release|Any CPU.Build.0 = Release|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Release|Any CPU.Build.0 = Release|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Release|Any CPU.Build.0 = Release|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Release|Any CPU.Build.0 = Release|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Release|Any CPU.Build.0 = Release|Any CPU - {A8DE7E8A-700F-4FC4-8BD6-96879F24170F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8DE7E8A-700F-4FC4-8BD6-96879F24170F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8DE7E8A-700F-4FC4-8BD6-96879F24170F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8DE7E8A-700F-4FC4-8BD6-96879F24170F}.Release|Any CPU.Build.0 = Release|Any CPU - {84BDF841-2487-43BA-831E-2854FEBA7D29}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {84BDF841-2487-43BA-831E-2854FEBA7D29}.Debug|Any CPU.Build.0 = Debug|Any CPU - {84BDF841-2487-43BA-831E-2854FEBA7D29}.Release|Any CPU.ActiveCfg = Release|Any CPU - {84BDF841-2487-43BA-831E-2854FEBA7D29}.Release|Any CPU.Build.0 = Release|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Release|Any CPU.Build.0 = Release|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Release|Any CPU.Build.0 = Release|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Release|Any CPU.Build.0 = Release|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Release|Any CPU.Build.0 = Release|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Release|Any CPU.Build.0 = Release|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Release|Any CPU.Build.0 = Release|Any CPU - {EA144C64-CE14-40DF-A876-5D302A4FC208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA144C64-CE14-40DF-A876-5D302A4FC208}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA144C64-CE14-40DF-A876-5D302A4FC208}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA144C64-CE14-40DF-A876-5D302A4FC208}.Release|Any CPU.Build.0 = Release|Any CPU - {D25156E6-532F-4BCC-8EE0-8A3F1986E10E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D25156E6-532F-4BCC-8EE0-8A3F1986E10E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D25156E6-532F-4BCC-8EE0-8A3F1986E10E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D25156E6-532F-4BCC-8EE0-8A3F1986E10E}.Release|Any CPU.Build.0 = Release|Any CPU - {F5CCC079-8A6C-45E2-BA9D-09B31E072A57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5CCC079-8A6C-45E2-BA9D-09B31E072A57}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5CCC079-8A6C-45E2-BA9D-09B31E072A57}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5CCC079-8A6C-45E2-BA9D-09B31E072A57}.Release|Any CPU.Build.0 = Release|Any CPU - {869C267D-D659-4DC6-AD64-6B466611FA61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {869C267D-D659-4DC6-AD64-6B466611FA61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {869C267D-D659-4DC6-AD64-6B466611FA61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {869C267D-D659-4DC6-AD64-6B466611FA61}.Release|Any CPU.Build.0 = Release|Any CPU - {DB417421-B5E7-499B-A19A-C04830BFF75F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB417421-B5E7-499B-A19A-C04830BFF75F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB417421-B5E7-499B-A19A-C04830BFF75F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB417421-B5E7-499B-A19A-C04830BFF75F}.Release|Any CPU.Build.0 = Release|Any CPU - {F51EFCF5-812A-4BBC-AC88-82372B3CF78D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F51EFCF5-812A-4BBC-AC88-82372B3CF78D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F51EFCF5-812A-4BBC-AC88-82372B3CF78D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F51EFCF5-812A-4BBC-AC88-82372B3CF78D}.Release|Any CPU.Build.0 = Release|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Release|Any CPU.Build.0 = Release|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Release|Any CPU.Build.0 = Release|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Release|Any CPU.Build.0 = Release|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Release|Any CPU.Build.0 = Release|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Release|Any CPU.Build.0 = Release|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Release|Any CPU.Build.0 = Release|Any CPU - {742913C8-F10F-4B5E-AAE5-A52800F080BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {742913C8-F10F-4B5E-AAE5-A52800F080BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {742913C8-F10F-4B5E-AAE5-A52800F080BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {742913C8-F10F-4B5E-AAE5-A52800F080BB}.Release|Any CPU.Build.0 = Release|Any CPU - {730CC41B-99F7-4A1B-A645-093494ECEBC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {730CC41B-99F7-4A1B-A645-093494ECEBC1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {730CC41B-99F7-4A1B-A645-093494ECEBC1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {730CC41B-99F7-4A1B-A645-093494ECEBC1}.Release|Any CPU.Build.0 = Release|Any CPU - {F74D8A4E-737F-4144-94BF-9EE80AFC8E9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F74D8A4E-737F-4144-94BF-9EE80AFC8E9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F74D8A4E-737F-4144-94BF-9EE80AFC8E9B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F74D8A4E-737F-4144-94BF-9EE80AFC8E9B}.Release|Any CPU.Build.0 = Release|Any CPU - {7DBC2821-22B2-497F-A594-18CF3EE79940}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DBC2821-22B2-497F-A594-18CF3EE79940}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DBC2821-22B2-497F-A594-18CF3EE79940}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DBC2821-22B2-497F-A594-18CF3EE79940}.Release|Any CPU.Build.0 = Release|Any CPU - {B9421FC5-47EB-428D-92C6-F688D02ABE06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9421FC5-47EB-428D-92C6-F688D02ABE06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9421FC5-47EB-428D-92C6-F688D02ABE06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9421FC5-47EB-428D-92C6-F688D02ABE06}.Release|Any CPU.Build.0 = Release|Any CPU - {6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9}.Release|Any CPU.Build.0 = Release|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Release|Any CPU.Build.0 = Release|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Release|Any CPU.Build.0 = Release|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Release|Any CPU.Build.0 = Release|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Release|Any CPU.Build.0 = Release|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Release|Any CPU.Build.0 = Release|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Release|Any CPU.Build.0 = Release|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Release|Any CPU.Build.0 = Release|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Debug|Any CPU.Build.0 = Debug|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Release|Any CPU.ActiveCfg = Release|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Release|Any CPU.Build.0 = Release|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Release|Any CPU.Build.0 = Release|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Release|Any CPU.Build.0 = Release|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Release|Any CPU.Build.0 = Release|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Release|Any CPU.Build.0 = Release|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Release|Any CPU.Build.0 = Release|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Release|Any CPU.Build.0 = Release|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Release|Any CPU.Build.0 = Release|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Release|Any CPU.Build.0 = Release|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Release|Any CPU.Build.0 = Release|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Release|Any CPU.Build.0 = Release|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Release|Any CPU.Build.0 = Release|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Release|Any CPU.Build.0 = Release|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Release|Any CPU.Build.0 = Release|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Release|Any CPU.Build.0 = Release|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Release|Any CPU.Build.0 = Release|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Release|Any CPU.Build.0 = Release|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Release|Any CPU.Build.0 = Release|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Release|Any CPU.Build.0 = Release|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Release|Any CPU.Build.0 = Release|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Release|Any CPU.Build.0 = Release|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Release|Any CPU.Build.0 = Release|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.Build.0 = Release|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.Build.0 = Release|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Release|Any CPU.Build.0 = Release|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Release|Any CPU.Build.0 = Release|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Release|Any CPU.Build.0 = Release|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Release|Any CPU.Build.0 = Release|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Release|Any CPU.Build.0 = Release|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Release|Any CPU.Build.0 = Release|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Release|Any CPU.Build.0 = Release|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Release|Any CPU.Build.0 = Release|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Release|Any CPU.Build.0 = Release|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Release|Any CPU.Build.0 = Release|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Release|Any CPU.Build.0 = Release|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Release|Any CPU.Build.0 = Release|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Release|Any CPU.Build.0 = Release|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Release|Any CPU.Build.0 = Release|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Release|Any CPU.Build.0 = Release|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Release|Any CPU.Build.0 = Release|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Release|Any CPU.Build.0 = Release|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Release|Any CPU.Build.0 = Release|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Release|Any CPU.Build.0 = Release|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Release|Any CPU.Build.0 = Release|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Release|Any CPU.Build.0 = Release|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Release|Any CPU.Build.0 = Release|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Release|Any CPU.Build.0 = Release|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Release|Any CPU.Build.0 = Release|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Release|Any CPU.Build.0 = Release|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Release|Any CPU.Build.0 = Release|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Release|Any CPU.Build.0 = Release|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Release|Any CPU.Build.0 = Release|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Release|Any CPU.Build.0 = Release|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Release|Any CPU.Build.0 = Release|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Release|Any CPU.Build.0 = Release|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Release|Any CPU.Build.0 = Release|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Release|Any CPU.Build.0 = Release|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Release|Any CPU.Build.0 = Release|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Release|Any CPU.Build.0 = Release|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Release|Any CPU.Build.0 = Release|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Release|Any CPU.Build.0 = Release|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Release|Any CPU.Build.0 = Release|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Release|Any CPU.Build.0 = Release|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Release|Any CPU.Build.0 = Release|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Release|Any CPU.Build.0 = Release|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Release|Any CPU.Build.0 = Release|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Release|Any CPU.Build.0 = Release|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Release|Any CPU.Build.0 = Release|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Release|Any CPU.Build.0 = Release|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Release|Any CPU.Build.0 = Release|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Release|Any CPU.Build.0 = Release|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Release|Any CPU.Build.0 = Release|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Release|Any CPU.Build.0 = Release|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Release|Any CPU.Build.0 = Release|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Release|Any CPU.Build.0 = Release|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Release|Any CPU.Build.0 = Release|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Release|Any CPU.Build.0 = Release|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Release|Any CPU.Build.0 = Release|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Release|Any CPU.Build.0 = Release|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.Build.0 = Release|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.Build.0 = Release|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.Build.0 = Release|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Release|Any CPU.Build.0 = Release|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Release|Any CPU.Build.0 = Release|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.Build.0 = Release|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.Build.0 = Release|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.Build.0 = Debug|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.ActiveCfg = Release|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.Build.0 = Release|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Release|Any CPU.Build.0 = Release|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Release|Any CPU.Build.0 = Release|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Release|Any CPU.Build.0 = Release|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Debug|Any CPU.Build.0 = Debug|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Release|Any CPU.ActiveCfg = Release|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Release|Any CPU.Build.0 = Release|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Release|Any CPU.Build.0 = Release|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Release|Any CPU.Build.0 = Release|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Release|Any CPU.Build.0 = Release|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Release|Any CPU.Build.0 = Release|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Release|Any CPU.Build.0 = Release|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Release|Any CPU.Build.0 = Release|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Release|Any CPU.Build.0 = Release|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Debug|Any CPU.Build.0 = Debug|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Release|Any CPU.ActiveCfg = Release|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Release|Any CPU.Build.0 = Release|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Release|Any CPU.Build.0 = Release|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Release|Any CPU.Build.0 = Release|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Release|Any CPU.Build.0 = Release|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Release|Any CPU.Build.0 = Release|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Release|Any CPU.Build.0 = Release|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Release|Any CPU.Build.0 = Release|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Release|Any CPU.Build.0 = Release|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Release|Any CPU.Build.0 = Release|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Release|Any CPU.Build.0 = Release|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Release|Any CPU.Build.0 = Release|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Release|Any CPU.Build.0 = Release|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Release|Any CPU.Build.0 = Release|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Release|Any CPU.Build.0 = Release|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Release|Any CPU.Build.0 = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.Build.0 = Release|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Release|Any CPU.Build.0 = Release|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Release|Any CPU.Build.0 = Release|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Release|Any CPU.Build.0 = Release|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Release|Any CPU.Build.0 = Release|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Release|Any CPU.Build.0 = Release|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Release|Any CPU.Build.0 = Release|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Release|Any CPU.Build.0 = Release|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Release|Any CPU.Build.0 = Release|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Release|Any CPU.Build.0 = Release|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Release|Any CPU.Build.0 = Release|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Release|Any CPU.Build.0 = Release|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Release|Any CPU.Build.0 = Release|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Release|Any CPU.Build.0 = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.Build.0 = Release|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} = {D52D5A11-78EF-4154-8298-267738A6715B} - {77BDEF2B-1A30-4E64-BC35-0DFC21091327} = {A057F430-AD93-49D9-8080-6E074AF05694} - {573B7B0E-3065-42DE-A391-EE026CE7A366} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} - {E2408063-FB1F-4513-B4A7-1FE50667C6E8} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {0439B173-F41E-4CE0-A44A-CCB70328F272} = {D52D5A11-78EF-4154-8298-267738A6715B} - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {A584D040-95AC-4422-93FF-7B80532213F0} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {76249548-4344-4CD0-A0AC-12AC54184B58} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {A5543E56-DA53-494D-A531-DA75091D46FF} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {8AC72641-30D3-4ACF-89FA-808FADC55C2E} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {9E72FEB9-A626-4312-892B-CDD043879758} = {D52D5A11-78EF-4154-8298-267738A6715B} - {8B09385A-719C-4B83-B61E-0ECD5D2734BD} = {9E72FEB9-A626-4312-892B-CDD043879758} - {8E569C1C-2637-4D89-804C-50FBC83948FB} = {9E72FEB9-A626-4312-892B-CDD043879758} - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D} = {9E72FEB9-A626-4312-892B-CDD043879758} - {FF1839EA-FB6B-4ED5-9804-E40427046D35} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D} = {6255DBAD-A388-4418-A5EB-C79630786028} - {6E4A0D87-C3CE-430F-A475-A6B68C116D96} = {6255DBAD-A388-4418-A5EB-C79630786028} - {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} = {D52D5A11-78EF-4154-8298-267738A6715B} - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {FDEECE0D-6F66-4053-948E-9AC021B97C8D} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873} = {ECC8B9A9-9E92-4493-984D-2E350A49189D} - {371B293B-0CA9-4385-8EBB-5224332066D2} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {47CC8F7A-681D-42B9-AE04-78453782C1B6} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {F595CB9F-B117-4D62-A1AE-48599927DB36} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {5CF403B2-47C9-4E4E-8856-0294BDD64884} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {059473BA-FAF9-405F-9985-33DDCA2E9F0D} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {31B03DCB-ED12-4412-867A-61E347D40D8C} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {AB984240-EF03-416F-A9B2-F5CF169E04B7} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0} = {11CDB632-9A54-439F-8B68-32B3C775BC3A} - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259} = {11CDB632-9A54-439F-8B68-32B3C775BC3A} - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {1DA91161-8757-4A68-A0A1-8C94C36C9240} = {6255DBAD-A388-4418-A5EB-C79630786028} - {F4923692-D343-4318-AECA-96F580B1A563} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F135B9E8-3FFE-44E9-835B-7B6A928F4823} = {F4923692-D343-4318-AECA-96F580B1A563} - {75A6D078-C19D-4030-88CC-C2A8608FF604} = {F4923692-D343-4318-AECA-96F580B1A563} - {2D895594-3FF5-4507-853A-CB65F2DB72ED} = {F4923692-D343-4318-AECA-96F580B1A563} - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93} = {F4923692-D343-4318-AECA-96F580B1A563} - {0655A0FB-59E8-4A9F-BAF5-47A89377F747} = {F4923692-D343-4318-AECA-96F580B1A563} - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE} = {F4923692-D343-4318-AECA-96F580B1A563} - {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {F3D9B137-32DE-4018-8058-78AB17FCDF9C} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {52B5D4F7-237B-4E0A-A167-68442164F70A} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F19C8B0F-A332-4190-9ABE-95790E0AE864} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {72DCA4CF-8B95-47C9-B02A-2671953B7987} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {86A67B8C-EFA0-4103-B60F-312F07C15A7A} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {F359AAA1-C854-444A-88F2-1C0D8A07F864} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {5D0ED1FC-3A7C-4531-9512-832E73AD9555} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {2BF7FB73-0C62-4ECF-99F0-0583855D2777} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {6FE7E243-2D99-4567-8786-6C9283D608EF} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {685188AC-A145-4A27-BF5F-9C970A59AA9C} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {F12F4645-C0FE-4129-8C71-65B4039DC445} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C457FA70-8732-44B8-A018-C96D14025D4B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7071E78B-755B-410A-830B-AA05D7168944} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {87B65CBD-0FF4-4FB5-9ABC-161911A71179} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F40F88F1-CA90-4A79-B772-80E287E25982} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {CC362C67-6FC1-42B3-A130-8120AA8D790C} = {D52D5A11-78EF-4154-8298-267738A6715B} - {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E92A1CAA-5758-41EF-B67E-C0D394E85417} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {F18DE651-A3E4-478F-A2B5-686429729EB8} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {42309C06-C0F2-490F-931B-CF41FA1970FF} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {14CDBAD1-10C8-464A-B445-1F727C988010} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {97B4A37E-B93E-48C9-95D5-689CB9495D8B} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {48DE251A-3482-4934-BC26-F99D2235AC9F} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C892CD81-50AE-49E5-BF44-A0C28A1614CC} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {90E88EAC-4291-4406-8D88-EFDF61B11292} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {84868710-ECBB-4025-900A-EEB99EC49534} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {D3BAA44E-8395-4E8A-AA96-6B463356C537} = {D52D5A11-78EF-4154-8298-267738A6715B} - {5BE18D72-0D02-4854-966E-745CE5DAF77F} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {06D34108-01BA-4C77-A704-4DD9E6F7E32C} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {A98C939C-9F48-414A-A2D3-853BE4447397} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {FBE91498-D83B-4873-A67E-0FB9D1C366F0} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {6084D52D-775B-4A39-8CD5-AA2F362B5A61} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {34BB9810-2983-4E55-A96A-132D32310145} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {8EF31071-3521-409D-9740-BBFBFC04C50E} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {13219C1C-23E1-4EBA-93FB-86830C93A800} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {60D0BEF2-FEAF-4066-8377-6C873CB24858} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {340BE5AC-68EC-41A5-9D0D-266037C58F13} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {BC518F26-996E-4DF0-BB44-783EB1C275D2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {63D1DC91-C7C7-491A-8423-B0B89F39443F} = {B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B} - {1E0E82D2-F53A-4326-9E39-D7D677590543} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {6C3D4C1C-4864-44A9-8649-9856ABF667FA} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {F71A0D28-397D-4094-B1C2-7925E1310676} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {CEAF0044-28D3-4585-B69D-D65FF6D4745E} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {7D02D803-F9A9-492C-9B5E-454E4B258466} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {FD04A084-BB8A-4733-B9C5-FACF40342A8A} = {7D02D803-F9A9-492C-9B5E-454E4B258466} - {67A76560-D39F-4D49-B858-B476E1DFE37B} = {F4923692-D343-4318-AECA-96F580B1A563} - {DC33925B-264D-421B-96CC-46F853CBCC70} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {93317D44-835C-4F5E-B85D-580D51D5FFF4} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {DAF80936-FBEC-45AB-92DF-34966B0148FD} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {995756A1-A379-4797-89F0-87D219B5AF00} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {3811B6AE-D86C-429D-AE37-B34AE31B7174} = {F4615BCE-D5C1-407A-8681-8EEE92DEF9D0} - {6DB63EC6-0278-4DBA-A999-768481018B70} = {685188AC-A145-4A27-BF5F-9C970A59AA9C} - {B6DA1032-ADB7-4F4C-9B32-F5F9160CB6E2} = {E2408063-FB1F-4513-B4A7-1FE50667C6E8} - {8BB50CB6-1E99-4617-B8A6-EABDED67405D} = {A2EA6B3F-AD1A-4FDA-B12E-F71B20A43A6B} - {A200E783-CBA2-4F64-A6EC-49D5C6482DEB} = {E5D1B78A-1A8F-4D52-BF99-A4A863ADE898} - {A17C9F1D-457A-48AC-B89C-722D8B3955DA} = {608A3BD0-FC8D-48B0-B1C5-F3203A3BE99F} - {842E19B3-8110-40FE-AAFF-D288BC928E55} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {C1319EC1-A489-482B-A343-38B52D8AB0B0} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {3C7A8246-DE82-4330-8697-24EF1B1C515D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {4059F87E-9762-46C1-AEB1-B1128EA533AE} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {433AD1FB-2DE8-479F-B89E-A17217591538} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {65311EC9-7A86-4E73-A587-F06A99474EDD} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {CD9081C6-7CA0-4A93-9318-33E54F3ED275} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {D262405E-1C72-4F14-A799-40471BAD48DC} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {440C9BD9-85EA-4473-AB1C-7C3562DF4915} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {23C3B247-523A-4FBF-B785-2F035E0089BD} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {C7CF4193-6397-4450-AF42-3BACD7CF292E} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {8FE2725C-6829-4778-93BA-A53260697AFB} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {A4B972EC-9F0B-4405-9965-766FABC9B07E} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {31E60E23-FD98-4D5E-A137-2B3F2968BA09} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {A030CD8E-61F3-4C15-B28A-C301446DDBEC} = {A5543E56-DA53-494D-A531-DA75091D46FF} - {D01D859E-4B72-478A-BABD-90F0981652D5} = {D52D5A11-78EF-4154-8298-267738A6715B} - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {F1BE6113-3439-45BB-8B58-20ACA4056895} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {77C2E24A-D143-44E7-86F9-AB6C5D444F63} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {8DF50094-6791-4C7C-B07D-C3E995B69C49} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {13ACF670-F109-404E-B252-2FA34A4EA061} = {D52D5A11-78EF-4154-8298-267738A6715B} - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {9EC33D45-CCC7-41DF-829E-6B89A640FE35} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {902D822A-52B6-481C-96C5-ECD891FF83FC} = {9EC33D45-CCC7-41DF-829E-6B89A640FE35} - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {76A5564E-033B-4AA6-A22B-78B6EB134CC6} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA} = {F4923692-D343-4318-AECA-96F580B1A563} - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED} = {F4923692-D343-4318-AECA-96F580B1A563} - {ABD89F39-62D9-439E-8662-BE4F36BFA04F} = {D52D5A11-78EF-4154-8298-267738A6715B} - {D4B4800F-6238-4EA9-A9BB-298D668C26C4} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {F9AC4123-7987-47D3-85D6-CD13928F3683} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {22BDDF5C-F911-4978-B83F-981F3652BF45} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {995DB1CE-A2FC-4468-A521-4207FD587EC5} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} = {D52D5A11-78EF-4154-8298-267738A6715B} - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {920867B4-4740-4074-9B49-14002B272A63} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {3D422738-B111-4DEE-82E1-C3A90F1133B1} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {08CC528E-98D7-41D9-957D-9F9064645788} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {B507D18B-770E-4581-854B-15579AC7074F} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7C4C266C-DC2A-4A48-AB87-185E284B86E9} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {0380623A-EC74-430B-AA59-A6D23BC5E108} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {102C3711-135E-446D-9A35-AEFB79993CAA} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {2B7C1441-8801-4121-ABFB-03771E9DFE46} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {ECC8B9A9-9E92-4493-984D-2E350A49189D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {942816E3-B270-40DC-9532-C1077FF59A32} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {FBB50072-33BE-4B4A-8908-E98BC0C80B92} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {83E698F6-F8CD-4604-AB80-01A203389501} = {D52D5A11-78EF-4154-8298-267738A6715B} - {D509011F-4690-4F21-BA30-E4C31799993F} = {83E698F6-F8CD-4604-AB80-01A203389501} - {257C64BC-BD16-4F6D-A0B9-E286A4161241} = {83E698F6-F8CD-4604-AB80-01A203389501} - {785251E2-6E77-40E3-90C2-4DFB63D0721B} = {83E698F6-F8CD-4604-AB80-01A203389501} - {0521239A-6B83-414F-B3E2-0515FC70F121} = {83E698F6-F8CD-4604-AB80-01A203389501} - {44E33132-9427-4E52-B105-67A8BC2BC29E} = {83E698F6-F8CD-4604-AB80-01A203389501} - {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {D3008465-B344-4243-B14A-A1430E2BEC48} = {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E} = {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} - {9DEBD2BE-B7B6-49BF-8726-CD92C1163323} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {34C664D3-416E-4639-B25A-8D8F434F9CB8} = {672E1170-7B18-474B-85C7-1961BF2A48AE} - {A8DE7E8A-700F-4FC4-8BD6-96879F24170F} = {9DEBD2BE-B7B6-49BF-8726-CD92C1163323} - {84BDF841-2487-43BA-831E-2854FEBA7D29} = {34C664D3-416E-4639-B25A-8D8F434F9CB8} - {15EC4A03-D172-4984-B9CA-2C73929838DE} = {83E698F6-F8CD-4604-AB80-01A203389501} - {74C13BCC-A5A5-40FA-81E8-83DCCF760148} = {83E698F6-F8CD-4604-AB80-01A203389501} - {427382F6-3153-47A2-BBC4-88F6EA116A8F} = {83E698F6-F8CD-4604-AB80-01A203389501} - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {42FD76A3-803A-4E07-8A90-4269204B7B87} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {E12DFE37-3F4D-435D-97AE-903259AE2DF4} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {D724FDCC-375A-4D61-A444-4264A00A6AC9} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {B2493730-4DDC-4DA7-BF19-CACD75450270} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {B18CF0D3-3D01-4A64-A9C4-DC0C214BEE42} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {F260FB5F-C6C7-4948-B638-E4D6986D07ED} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {B1AC656F-8F4C-43D5-B5A0-CCF5F119EA44} = {C90A505F-000E-4AE4-8CCD-AB5FE5092B5C} - {EA144C64-CE14-40DF-A876-5D302A4FC208} = {E12DFE37-3F4D-435D-97AE-903259AE2DF4} - {D25156E6-532F-4BCC-8EE0-8A3F1986E10E} = {D724FDCC-375A-4D61-A444-4264A00A6AC9} - {F5CCC079-8A6C-45E2-BA9D-09B31E072A57} = {B2493730-4DDC-4DA7-BF19-CACD75450270} - {869C267D-D659-4DC6-AD64-6B466611FA61} = {B18CF0D3-3D01-4A64-A9C4-DC0C214BEE42} - {DB417421-B5E7-499B-A19A-C04830BFF75F} = {F260FB5F-C6C7-4948-B638-E4D6986D07ED} - {F51EFCF5-812A-4BBC-AC88-82372B3CF78D} = {B1AC656F-8F4C-43D5-B5A0-CCF5F119EA44} - {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} = {D52D5A11-78EF-4154-8298-267738A6715B} - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {CDD4CC0F-5493-40C2-B889-3670263888D8} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F74AAE01-7B87-44CA-85ED-9A6307D51504} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F3E04039-7BEE-46F8-B33B-FE13E977DCCA} = {52E60F16-6304-4E37-A220-C94D8C5D27DC} - {742913C8-F10F-4B5E-AAE5-A52800F080BB} = {E12DFE37-3F4D-435D-97AE-903259AE2DF4} - {730CC41B-99F7-4A1B-A645-093494ECEBC1} = {D724FDCC-375A-4D61-A444-4264A00A6AC9} - {F74D8A4E-737F-4144-94BF-9EE80AFC8E9B} = {B2493730-4DDC-4DA7-BF19-CACD75450270} - {7DBC2821-22B2-497F-A594-18CF3EE79940} = {B18CF0D3-3D01-4A64-A9C4-DC0C214BEE42} - {B9421FC5-47EB-428D-92C6-F688D02ABE06} = {F260FB5F-C6C7-4948-B638-E4D6986D07ED} - {6AC6AC37-0163-4EF2-A49C-2E0B87F73AE9} = {B1AC656F-8F4C-43D5-B5A0-CCF5F119EA44} - {35D17AF3-FDCD-4704-969C-E82DBCC0A232} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {984F481B-79FF-4825-917B-944F151694BC} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {B12BECC4-8A58-4DBD-A5CD-144A507972BB} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {12896A3F-5F7E-4192-8A58-E1D2527109D1} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {405694F8-0051-4DAE-A991-919FAC36C7DA} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {5F0BB690-0FBB-455A-AE9A-8BA914AA78F6} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F7103498-8B5B-4698-AACE-9E949F732E77} = {5F0BB690-0FBB-455A-AE9A-8BA914AA78F6} - {2EAA690B-1395-4952-95A0-A52F929028C4} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {722FE012-8F23-4558-9E8F-A37C02902058} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {79D3C6D6-6433-471D-B354-477E07CB08EE} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {97062425-3379-4F8D-BFA2-D445C56C0801} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {03EC70B8-912C-4FBE-94DD-6327F4F23021} = {83E698F6-F8CD-4604-AB80-01A203389501} - {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} = {D52D5A11-78EF-4154-8298-267738A6715B} - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {E293BB96-5054-497B-BCE5-64AF9B0457B1} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {FB7AF3F8-44CD-4732-8A25-A43902437B89} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {6472B3C1-C237-49CD-82C8-821AD001096A} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {47D57848-A910-4869-8A46-84E40A985FEE} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {8A1F9647-B773-40AB-9126-30868014AE58} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {10CF8240-4276-4199-B3D1-C45F16468EBD} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {39DFEFCD-7C73-450F-9A2F-7426188A890B} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {DD1B10ED-73E2-41BE-928A-46501050FE2A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7779D9BD-5928-49A2-965F-537967004238} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {AC41F335-E240-47E0-B409-AFAD1400E626} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {59627844-A66A-46AC-B882-E8F302D0EC24} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2} = {59627844-A66A-46AC-B882-E8F302D0EC24} - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {B4C8056F-7325-4DB1-9F09-A6F37B052192} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D} = {83E698F6-F8CD-4604-AB80-01A203389501} - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {87CE2F0B-0469-4C76-B325-00EA7AB94B99} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {34987F45-8234-428C-AB41-783D42295C32} = {87CE2F0B-0469-4C76-B325-00EA7AB94B99} - {227DA969-291B-4749-985C-7A83523B7F53} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C} = {87CE2F0B-0469-4C76-B325-00EA7AB94B99} - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {11CDB632-9A54-439F-8B68-32B3C775BC3A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {C6D62079-B3F5-4006-AA49-3BF12C4805BB} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {848F6760-9B11-4C9A-9843-9D71DD66D9DA} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {6255DBAD-A388-4418-A5EB-C79630786028} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {A025B8D2-5D92-4023-82AB-97A672A5A132} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {E09E476C-9DF8-46AC-848E-4E7635369117} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {8142FB8C-3D32-4062-BD95-B2F61A1A390A} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {4155336A-DC06-4885-878D-03AF5DFAF47D} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {1B112FAC-CB57-48B6-A3D5-95456477CB8D} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {B84E4D98-0B10-4189-8572-F6F7B4E384B7} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {E81EC3E4-521F-4C52-8AA0-A783847E764E} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {49EB2864-B715-47DD-AE47-C5243C656F47} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {A057F430-AD93-49D9-8080-6E074AF05694} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {68538541-4280-46F5-BA08-99ACA8575615} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F6F93723-5BC3-4D25-A83E-25B41B6D956F} = {A057F430-AD93-49D9-8080-6E074AF05694} - {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {77ED7922-BF30-4436-8A85-78F812583913} = {D52D5A11-78EF-4154-8298-267738A6715B} - {109BF321-1BC6-4031-A59B-7B5375EBA8C5} = {77ED7922-BF30-4436-8A85-78F812583913} - {08A78A69-913B-4C5E-BCE0-739585F82D1E} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {B6857FC4-97C2-4E20-B005-1FAABC574B88} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {B6D4AADE-3ABA-45E6-9916-2F8798412549} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {86E85013-7C71-4770-9323-18897A64F5B2} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {014A9583-0EAA-48A4-ACBE-07DC88159E13} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {4C71CA88-0D04-4DDB-8906-B953908B8B8B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE} = {77ED7922-BF30-4436-8A85-78F812583913} - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A} = {77ED7922-BF30-4436-8A85-78F812583913} - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE} = {77ED7922-BF30-4436-8A85-78F812583913} - {72D54834-7ADF-4B18-A745-FCBBC255073B} = {77ED7922-BF30-4436-8A85-78F812583913} - {F6A9D966-0022-440B-AE27-564A74CDED48} = {D52D5A11-78EF-4154-8298-267738A6715B} - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {40D7A0A3-68BD-431E-A67A-E2A35508D55D} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {47550AB9-FA06-42D6-A4B8-7DD12FE66563} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {ED3DF100-C5DB-4334-A847-118922B28D95} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {15482834-9242-4D20-9736-9DA571A9A83A} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {8A255A72-50FC-460E-9897-FA53F455580B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {CED33625-A034-475B-A4C0-A4E7D1BADD10} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {BF85DB7F-70C2-4804-AA57-FACE204981DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {8826831D-8733-473A-B47B-A30C3732B13D} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72} = {83E698F6-F8CD-4604-AB80-01A203389501} - {54BBA043-317B-4A4F-B583-513D08BC25A7} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E469F047-6AD0-4D2B-9900-46358DA3BC30} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {EB9F1905-1798-4766-8347-A8D2A9DBFAED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {CCE5C620-E17A-4EB1-A17A-9F90311B197D} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {267933BD-BFB8-4906-BA39-DF193B2FD558} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {01B86C39-B0C8-48A4-949C-1C63D755B02C} = {F4923692-D343-4318-AECA-96F580B1A563} - {DD6609C7-07AC-49FD-B588-44E649D0AE6E} = {F4923692-D343-4318-AECA-96F580B1A563} - {856B4ACA-BD13-417F-A6E2-0F401F877189} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {B52B199C-0E1C-4CE9-B066-71D26F618424} = {F4923692-D343-4318-AECA-96F580B1A563} - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {D52D5A11-78EF-4154-8298-267738A6715B} - {DD365101-E8FC-6516-2883-B9CA024B36FA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {F1C6C6B6-5B99-5AA6-7F76-27560C111605} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {459DA653-F12A-65B5-41EF-A5877B1C38BA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {9DD70A99-41A6-8598-553E-2B5AB6277035} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C} = {9E72FEB9-A626-4312-892B-CDD043879758} - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A} = {9E72FEB9-A626-4312-892B-CDD043879758} - {F810C8A8-1256-440F-BAAF-7F3588291963} = {9E72FEB9-A626-4312-892B-CDD043879758} - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59} = {9E72FEB9-A626-4312-892B-CDD043879758} - {C95DE287-9D21-4DCD-9281-A060B6D99774} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {96748DAE-D367-48C0-B64E-2F25010EAC4D} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {A4633711-7FB6-411A-8D08-BB9A0A778046} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {5A0063BF-EE72-E688-84C6-9E3CE0616C94} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {B7B63E08-8F62-34F6-FEA5-063267F1FC85} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {7C48C1CA-7E53-4261-A477-454DD3A8402C} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {A54344EB-05A7-A405-5368-4A9C0A60B078} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {C9266D5D-3860-09C3-F566-489BBB57A534} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {21542881-C560-4CBB-8AB1-CF757071A057} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {F3DF1C3E-7319-48B1-81AB-0284853BB567} = {21542881-C560-4CBB-8AB1-CF757071A057} - {7D7561CB-5059-4F5F-B736-B97195B46A91} = {21542881-C560-4CBB-8AB1-CF757071A057} - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA} = {21542881-C560-4CBB-8AB1-CF757071A057} - {418EE258-2670-29D3-480F-EC0FD07700E8} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {D63FEED3-2342-7E96-4121-B0C19CF1EA81} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {DED16774-635C-D781-4D5B-D1FA56EECF10} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08} = {F4923692-D343-4318-AECA-96F580B1A563} - {DD11D070-F39E-1C41-1843-AE3ADBE501EF} = {9E72FEB9-A626-4312-892B-CDD043879758} - {001D0817-1EED-4C04-821E-F815F148EC90} = {9E72FEB9-A626-4312-892B-CDD043879758} - {546E4417-5409-40F4-A125-E08329DD82BB} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {738A72FB-ED83-4127-AA3B-59BF90635F8F} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {9950639D-AA4C-4FF1-A65E-9790EB561C8A} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {5FA85E8E-3276-43DF-CC93-6A9847905166} = {9E72FEB9-A626-4312-892B-CDD043879758} - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7} = {A5543E56-DA53-494D-A531-DA75091D46FF} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.All.slnx b/aspnet-core/LINGYUN.MicroService.All.slnx new file mode 100644 index 000000000..508f80a80 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.All.slnx @@ -0,0 +1,500 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.Aspire.sln b/aspnet-core/LINGYUN.MicroService.Aspire.sln deleted file mode 100644 index 953bd9423..000000000 --- a/aspnet-core/LINGYUN.MicroService.Aspire.sln +++ /dev/null @@ -1,2903 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{C5CAD011-DF84-4914-939C-0C029DCEF26F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{77BDEF2B-1A30-4E64-BC35-0DFC21091327}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{573B7B0E-3065-42DE-A391-EE026CE7A366}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identityServer", "identityServer", "{0439B173-F41E-4CE0-A44A-CCB70328F272}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{A584D040-95AC-4422-93FF-7B80532213F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{76249548-4344-4CD0-A0AC-12AC54184B58}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{A5543E56-DA53-494D-A531-DA75091D46FF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{8AC72641-30D3-4ACF-89FA-808FADC55C2E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{AEC1E6D3-DC23-41BD-B456-3AAD26E34978}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{9E72FEB9-A626-4312-892B-CDD043879758}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{8B09385A-719C-4B83-B61E-0ECD5D2734BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{8E569C1C-2637-4D89-804C-50FBC83948FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "framework\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{FF1839EA-FB6B-4ED5-9804-E40427046D35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "framework\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "framework\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{6E4A0D87-C3CE-430F-A475-A6B68C116D96}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-message", "realtime-message", "{3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{A5851F0F-CB0D-4E29-A829-D1BDEADB807B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{FDEECE0D-6F66-4053-948E-9AC021B97C8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\realtime-message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{371B293B-0CA9-4385-8EBB-5224332066D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\realtime-message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{9E12ADBF-713B-4FE7-B71F-52B5078A57CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "framework\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{47CC8F7A-681D-42B9-AE04-78453782C1B6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "framework\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{F595CB9F-B117-4D62-A1AE-48599927DB36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "framework\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{5CF403B2-47C9-4E4E-8856-0294BDD64884}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "framework\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{059473BA-FAF9-405F-9985-33DDCA2E9F0D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun.Tests", "tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests.csproj", "{C8A00439-5B8D-4923-8FAA-AB75E2A786ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{31B03DCB-ED12-4412-867A-61E347D40D8C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\realtime-message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{AB984240-EF03-416F-A9B2-F5CF169E04B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi.Client", "modules\realtime-message\LINGYUN.Abp.MessageService.HttpApi.Client\LINGYUN.Abp.MessageService.HttpApi.Client.csproj", "{EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{65DDA934-B76B-4018-A565-CF6CEF0D6BB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{376D8343-DF83-41D2-BF6E-2F5DC8DBF259}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing.Tests", "tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests\LINGYUN.Abp.ExceptionHandling.Emailing.Tests.csproj", "{6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "framework\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{1DA91161-8757-4A68-A0A1-8C94C36C9240}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F4923692-D343-4318-AECA-96F580B1A563}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{F135B9E8-3FFE-44E9-835B-7B6A928F4823}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{75A6D078-C19D-4030-88CC-C2A8608FF604}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{2D895594-3FF5-4507-853A-CB65F2DB72ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{0655A0FB-59E8-4A9F-BAF5-47A89377F747}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{F3D9B137-32DE-4018-8058-78AB17FCDF9C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{52B5D4F7-237B-4E0A-A167-68442164F70A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{F19C8B0F-A332-4190-9ABE-95790E0AE864}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{72DCA4CF-8B95-47C9-B02A-2671953B7987}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi.Client", "modules\identity\LINGYUN.Abp.Identity.HttpApi.Client\LINGYUN.Abp.Identity.HttpApi.Client.csproj", "{7DDEAEA9-E392-469C-ACB6-908C5BAD669E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6}" - ProjectSection(SolutionItems) = preProject - modules\oss-management\README.md = modules\oss-management\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{86A67B8C-EFA0-4103-B60F-312F07C15A7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{854E1A42-FEA4-420E-9E83-0A39EE03F1ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{21FCEF89-9A3F-476E-833A-A9C2131B2AE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{F359AAA1-C854-444A-88F2-1C0D8A07F864}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{5D0ED1FC-3A7C-4531-9512-832E73AD9555}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{2BF7FB73-0C62-4ECF-99F0-0583855D2777}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{6FE7E243-2D99-4567-8786-6C9283D608EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "framework\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests\LINGYUN.Abp.Features.LimitValidation.Redis.Tests.csproj", "{F12F4645-C0FE-4129-8C71-65B4039DC445}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Tests", "tests\LINGYUN.Abp.Features.LimitValidation.Tests\LINGYUN.Abp.Features.LimitValidation.Tests.csproj", "{C457FA70-8732-44B8-A018-C96D14025D4B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "framework\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{7071E78B-755B-410A-830B-AA05D7168944}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "framework\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{87B65CBD-0FF4-4FB5-9ABC-161911A71179}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{F40F88F1-CA90-4A79-B772-80E287E25982}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{AC3C8985-73C2-472A-8E76-A0B8786FEC3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permission-management", "permission-management", "{CC362C67-6FC1-42B3-A130-8120AA8D790C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{BAE74ABC-1096-495F-A624-BEBFBC1896F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{E92A1CAA-5758-41EF-B67E-C0D394E85417}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{F18DE651-A3E4-478F-A2B5-686429729EB8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{42309C06-C0F2-490F-931B-CF41FA1970FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-aliyun", "cloud-aliyun", "{14CDBAD1-10C8-464A-B445-1F727C988010}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cloud-tencent", "cloud-tencent", "{3B96F4D8-4993-419B-BCEB-AFE4ED39449F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{97B4A37E-B93E-48C9-95D5-689CB9495D8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{B86EBB6F-A27F-4277-8265-937951A9DCB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Aliyun", "modules\oss-management\LINGYUN.Abp.OssManagement.Aliyun\LINGYUN.Abp.OssManagement.Aliyun.csproj", "{35B17218-9FB6-439E-AF73-9A1454BC923C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{D5036D3F-1C53-47EE-BA50-AD290AE062D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{BD74BE00-54E4-4979-8797-E8027695F396}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{48DE251A-3482-4934-BC26-F99D2235AC9F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent.Tests", "tests\LINGYUN.Abp.Location.Tencent.Tests\LINGYUN.Abp.Location.Tencent.Tests.csproj", "{94B47385-E47F-4FD7-A3A9-A7AA122EFC93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu.Tests", "tests\LINGYUN.Abp.Location.Baidu.Tests\LINGYUN.Abp.Location.Baidu.Tests.csproj", "{C892CD81-50AE-49E5-BF44-A0C28A1614CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Client", "framework\common\LINGYUN.Abp.AspNetCore.Mvc.Client\LINGYUN.Abp.AspNetCore.Mvc.Client.csproj", "{EEF03CC6-1013-4AAF-BEED-BB4BA5021039}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{90E88EAC-4291-4406-8D88-EFDF61B11292}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml", "framework\localization\LINGYUN.Abp.Localization.Xml\LINGYUN.Abp.Localization.Xml.csproj", "{84868710-ECBB-4025-900A-EEB99EC49534}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml.Tests", "tests\LINGYUN.Abp.Localization.Xml.Tests\LINGYUN.Abp.Localization.Xml.Tests.csproj", "{A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{D3BAA44E-8395-4E8A-AA96-6B463356C537}" - ProjectSection(SolutionItems) = preProject - modules\localization-management\README.md = modules\localization-management\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{5BE18D72-0D02-4854-966E-745CE5DAF77F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{73EAD4FE-B44F-44A7-904E-FFA5096D91BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application.Contracts", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj", "{06D34108-01BA-4C77-A704-4DD9E6F7E32C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application\LINGYUN.Abp.LocalizationManagement.Application.csproj", "{A98C939C-9F48-414A-A2D3-853BE4447397}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{A94BE05F-7DAB-461C-93E7-914CBDF4FA93}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj", "{FBE91498-D83B-4873-A67E-0FB9D1C366F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules", "rules", "{6084D52D-775B-4A39-8CD5-AA2F362B5A61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules", "framework\rules\LINGYUN.Abp.Rules\LINGYUN.Abp.Rules.csproj", "{D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules", "framework\rules\LINGYUN.Abp.Rules.NRules\LINGYUN.Abp.Rules.NRules.csproj", "{34BB9810-2983-4E55-A96A-132D32310145}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine", "framework\rules\LINGYUN.Abp.Rules.RulesEngine\LINGYUN.Abp.Rules.RulesEngine.csproj", "{4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine.Tests", "tests\LINGYUN.Abp.Rules.RulesEngine.Tests\LINGYUN.Abp.Rules.RulesEngine.Tests.csproj", "{8EF31071-3521-409D-9740-BBFBFC04C50E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{13219C1C-23E1-4EBA-93FB-86830C93A800}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundWorkers.Hangfire", "framework\common\LINGYUN.Abp.BackgroundWorkers.Hangfire\LINGYUN.Abp.BackgroundWorkers.Hangfire.csproj", "{60D0BEF2-FEAF-4066-8377-6C873CB24858}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Dashboard", "framework\common\LINGYUN.Abp.Hangfire.Dashboard\LINGYUN.Abp.Hangfire.Dashboard.csproj", "{340BE5AC-68EC-41A5-9D0D-266037C58F13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat", "framework\wechat\LINGYUN.Abp.Identity.WeChat\LINGYUN.Abp.Identity.WeChat.csproj", "{BC518F26-996E-4DF0-BB44-783EB1C275D2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elasticsearch", "elasticsearch", "{B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{63D1DC91-C7C7-491A-8423-B0B89F39443F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging", "framework\logging\LINGYUN.Abp.Logging\LINGYUN.Abp.Logging.csproj", "{1E0E82D2-F53A-4326-9E39-D7D677590543}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging.Serilog.Elasticsearch", "framework\logging\LINGYUN.Abp.Logging.Serilog.Elasticsearch\LINGYUN.Abp.Logging.Serilog.Elasticsearch.csproj", "{D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{6C3D4C1C-4864-44A9-8649-9856ABF667FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.EntityFrameworkCore", "framework\auditing\LINGYUN.Abp.AuditLogging.EntityFrameworkCore\LINGYUN.Abp.AuditLogging.EntityFrameworkCore.csproj", "{F71A0D28-397D-4094-B1C2-7925E1310676}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{CEAF0044-28D3-4585-B69D-D65FF6D4745E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "navigation", "navigation", "{7D02D803-F9A9-492C-9B5E-454E4B258466}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation", "framework\navigation\LINGYUN.Abp.UI.Navigation\LINGYUN.Abp.UI.Navigation.csproj", "{FD04A084-BB8A-4733-B9C5-FACF40342A8A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin\LINGYUN.Abp.UI.Navigation.VueVbenAdmin.csproj", "{67A76560-D39F-4D49-B858-B476E1DFE37B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{DC33925B-264D-421B-96CC-46F853CBCC70}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{93317D44-835C-4F5E-B85D-580D51D5FFF4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors", "framework\dapr\LINGYUN.Abp.Dapr.Actors\LINGYUN.Abp.Dapr.Actors.csproj", "{DAF80936-FBEC-45AB-92DF-34966B0148FD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore\LINGYUN.Abp.Dapr.Actors.AspNetCore.csproj", "{995756A1-A379-4797-89F0-87D219B5AF00}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{EB73D2CC-B1BE-471A-B76E-35F288CD0E16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Client.Wrapper\LINGYUN.Abp.Dapr.Client.Wrapper.csproj", "{842E19B3-8110-40FE-AAFF-D288BC928E55}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{C1319EC1-A489-482B-A343-38B52D8AB0B0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "open-api", "open-api", "{3C7A8246-DE82-4330-8697-24EF1B1C515D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi", "framework\open-api\LINGYUN.Abp.OpenApi\LINGYUN.Abp.OpenApi.csproj", "{4059F87E-9762-46C1-AEB1-B1128EA533AE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.Authorization", "framework\open-api\LINGYUN.Abp.OpenApi.Authorization\LINGYUN.Abp.OpenApi.Authorization.csproj", "{433AD1FB-2DE8-479F-B89E-A17217591538}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{65311EC9-7A86-4E73-A587-F06A99474EDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.OssManagement", "modules\oss-management\LINGYUN.Abp.BlobStoring.OssManagement\LINGYUN.Abp.BlobStoring.OssManagement.csproj", "{CD9081C6-7CA0-4A93-9318-33E54F3ED275}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi.Client", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi.Client\LINGYUN.Abp.OssManagement.HttpApi.Client.csproj", "{D262405E-1C72-4F14-A799-40471BAD48DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{529DF802-97C4-4BF2-BE7C-39663B3D9EA3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection", "framework\data-protection\LINGYUN.Abp.DataProtection\LINGYUN.Abp.DataProtection.csproj", "{BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.EntityFrameworkCore", "framework\data-protection\LINGYUN.Abp.DataProtection.EntityFrameworkCore\LINGYUN.Abp.DataProtection.EntityFrameworkCore.csproj", "{19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator", "framework\common\LINGYUN.Abp.IdGenerator\LINGYUN.Abp.IdGenerator.csproj", "{440C9BD9-85EA-4473-AB1C-7C3562DF4915}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{23C3B247-523A-4FBF-B785-2F035E0089BD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".Solution Items", ".Solution Items", "{A76A4741-AF91-44EF-A7B6-8E7AF4961146}" - ProjectSection(SolutionItems) = preProject - aspire\.gitignore = aspire\.gitignore - ..\common.props = ..\common.props - ..\common.secrets.props = ..\common.secrets.props - ..\configureawait.props = ..\configureawait.props - ..\Directory.Build.props = ..\Directory.Build.props - ..\Directory.Packages.props = ..\Directory.Packages.props - ..\NuGet.Config = ..\NuGet.Config - aspire\README.md = aspire\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.SettingManagement", "framework\cloud-tencent\LINGYUN.Abp.Tencent.SettingManagement\LINGYUN.Abp.Tencent.SettingManagement.csproj", "{C7CF4193-6397-4450-AF42-3BACD7CF292E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Sms.Tencent\LINGYUN.Abp.Sms.Tencent.csproj", "{8FE2725C-6829-4778-93BA-A53260697AFB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Tencent", "framework\cloud-tencent\LINGYUN.Abp.BlobStoring.Tencent\LINGYUN.Abp.BlobStoring.Tencent.csproj", "{A4B972EC-9F0B-4405-9965-766FABC9B07E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Tencent", "modules\oss-management\LINGYUN.Abp.OssManagement.Tencent\LINGYUN.Abp.OssManagement.Tencent.csproj", "{31E60E23-FD98-4D5E-A137-2B3F2968BA09}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.LinkUser", "modules\identityServer\LINGYUN.Abp.IdentityServer.LinkUser\LINGYUN.Abp.IdentityServer.LinkUser.csproj", "{25378F9D-2A66-4568-AAC6-E9282ACA3DD3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.QQ", "framework\cloud-tencent\LINGYUN.Abp.Tencent.QQ\LINGYUN.Abp.Tencent.QQ.csproj", "{3FCB1BCD-34BC-4F66-968F-38DB28371D0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{A030CD8E-61F3-4C15-B28A-C301446DDBEC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{D01D859E-4B72-478A-BABD-90F0981652D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{049E09BF-2E11-4E3B-926D-9DD6051A2DA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{F1BE6113-3439-45BB-8B58-20ACA4056895}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{77C2E24A-D143-44E7-86F9-AB6C5D444F63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application.Contracts", "modules\saas\LINGYUN.Abp.Saas.Application.Contracts\LINGYUN.Abp.Saas.Application.Contracts.csproj", "{D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application", "modules\saas\LINGYUN.Abp.Saas.Application\LINGYUN.Abp.Saas.Application.csproj", "{B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.HttpApi", "modules\saas\LINGYUN.Abp.Saas.HttpApi\LINGYUN.Abp.Saas.HttpApi.csproj", "{8DF50094-6791-4C7C-B07D-C3E995B69C49}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.HttpApi.Client", "modules\saas\LINGYUN.Abp.Saas.HttpApi.Client\LINGYUN.Abp.Saas.HttpApi.Client.csproj", "{96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhooks", "webhooks", "{13ACF670-F109-404E-B252-2FA34A4EA061}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebHooks", "modules\webhooks\LINGYUN.Abp.WebHooks\LINGYUN.Abp.WebHooks.csproj", "{91AE01B1-CC82-40E2-8290-B8A84C6E90D1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{9EC33D45-CCC7-41DF-829E-6B89A640FE35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{902D822A-52B6-481C-96C5-ECD891FF83FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits.csproj", "{46244C99-3A0D-4D88-9F24-2B7B586ADBA4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.OrganizaztionUnits", "modules\identity\LINGYUN.Abp.Identity.OrganizaztionUnits\LINGYUN.Abp.Identity.OrganizaztionUnits.csproj", "{76A5564E-033B-4AA6-A22B-78B6EB134CC6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Theme.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Theme.VueVbenAdmin\LINGYUN.Platform.Theme.VueVbenAdmin.csproj", "{67DC7FA0-506A-4977-95F6-BC739B2BC4BA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Settings.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Settings.VueVbenAdmin\LINGYUN.Platform.Settings.VueVbenAdmin.csproj", "{8DF55DAB-4C1D-46F7-9324-0050F47B3BED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "text-templating", "text-templating", "{ABD89F39-62D9-439E-8662-BE4F36BFA04F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain.Shared", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain.Shared\LINGYUN.Abp.TextTemplating.Domain.Shared.csproj", "{D4B4800F-6238-4EA9-A9BB-298D668C26C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain\LINGYUN.Abp.TextTemplating.Domain.csproj", "{F9AC4123-7987-47D3-85D6-CD13928F3683}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application.Contracts", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application.Contracts\LINGYUN.Abp.TextTemplating.Application.Contracts.csproj", "{22BDDF5C-F911-4978-B83F-981F3652BF45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application\LINGYUN.Abp.TextTemplating.Application.csproj", "{0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.HttpApi", "modules\text-templating\LINGYUN.Abp.TextTemplating.HttpApi\LINGYUN.Abp.TextTemplating.HttpApi.csproj", "{4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.EntityFrameworkCore", "modules\text-templating\LINGYUN.Abp.TextTemplating.EntityFrameworkCore\LINGYUN.Abp.TextTemplating.EntityFrameworkCore.csproj", "{130F8ED1-A64F-48DE-BF43-18EAD19CAF63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.HttpApi.Client", "modules\text-templating\LINGYUN.Abp.TextTemplating.HttpApi.Client\LINGYUN.Abp.TextTemplating.HttpApi.Client.csproj", "{A53FE09E-6B1C-46C0-9422-C313D14AE9E4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{995DB1CE-A2FC-4468-A521-4207FD587EC5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching-management", "caching-management", "{63FCC71F-1CEF-44D3-B95B-23EE58DE8C95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Domain", "modules\caching-management\LINGYUN.Abp.CachingManagement.Domain\LINGYUN.Abp.CachingManagement.Domain.csproj", "{7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.StackExchangeRedis", "modules\caching-management\LINGYUN.Abp.CachingManagement.StackExchangeRedis\LINGYUN.Abp.CachingManagement.StackExchangeRedis.csproj", "{920867B4-4740-4074-9B49-14002B272A63}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application.Contracts", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application.Contracts\LINGYUN.Abp.CachingManagement.Application.Contracts.csproj", "{3D422738-B111-4DEE-82E1-C3A90F1133B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application\LINGYUN.Abp.CachingManagement.Application.csproj", "{08CC528E-98D7-41D9-957D-9F9064645788}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.HttpApi", "modules\caching-management\LINGYUN.Abp.CachingManagement.HttpApi\LINGYUN.Abp.CachingManagement.HttpApi.csproj", "{B507D18B-770E-4581-854B-15579AC7074F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLocking.Dapr", "framework\dapr\LINGYUN.Abp.DistributedLocking.Dapr\LINGYUN.Abp.DistributedLocking.Dapr.csproj", "{178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx-pusher", "wx-pusher", "{53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher", "framework\wx-pusher\LINGYUN.Abp.WxPusher\LINGYUN.Abp.WxPusher.csproj", "{7C4C266C-DC2A-4A48-AB87-185E284B86E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WxPusher", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WxPusher\LINGYUN.Abp.Notifications.WxPusher.csproj", "{0380623A-EC74-430B-AA59-A6D23BC5E108}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher.SettingManagement", "framework\wx-pusher\LINGYUN.Abp.WxPusher.SettingManagement\LINGYUN.Abp.WxPusher.SettingManagement.csproj", "{C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WxPusher", "framework\wx-pusher\LINGYUN.Abp.Identity.WxPusher\LINGYUN.Abp.Identity.WxPusher.csproj", "{C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pushplus", "pushplus", "{A8F1C9FA-4F16-43F9-8CC6-CCD124154440}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus", "framework\pushplus\LINGYUN.Abp.PushPlus\LINGYUN.Abp.PushPlus.csproj", "{82CB7E17-ED5A-4D26-B116-BA7B4226E43C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus.SettingManagement", "framework\pushplus\LINGYUN.Abp.PushPlus.SettingManagement\LINGYUN.Abp.PushPlus.SettingManagement.csproj", "{102C3711-135E-446D-9A35-AEFB79993CAA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.PushPlus", "modules\realtime-notifications\LINGYUN.Abp.Notifications.PushPlus\LINGYUN.Abp.Notifications.PushPlus.csproj", "{2B7C1441-8801-4121-ABFB-03771E9DFE46}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{ECC8B9A9-9E92-4493-984D-2E350A49189D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{942816E3-B270-40DC-9532-C1077FF59A32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper.csproj", "{FBB50072-33BE-4B4A-8908-E98BC0C80B92}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "openiddict", "openiddict", "{83E698F6-F8CD-4604-AB80-01A203389501}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application.Contracts", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application.Contracts\LINGYUN.Abp.OpenIddict.Application.Contracts.csproj", "{D509011F-4690-4F21-BA30-E4C31799993F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application\LINGYUN.Abp.OpenIddict.Application.csproj", "{257C64BC-BD16-4F6D-A0B9-E286A4161241}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.HttpApi", "modules\openIddict\LINGYUN.Abp.OpenIddict.HttpApi\LINGYUN.Abp.OpenIddict.HttpApi.csproj", "{785251E2-6E77-40E3-90C2-4DFB63D0721B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.HttpApi.Client", "modules\openIddict\LINGYUN.Abp.OpenIddict.HttpApi.Client\LINGYUN.Abp.OpenIddict.HttpApi.Client.csproj", "{0521239A-6B83-414F-B3E2-0515FC70F121}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Dapr.Client", "modules\openIddict\LINGYUN.Abp.OpenIddict.Dapr.Client\LINGYUN.Abp.OpenIddict.Dapr.Client.csproj", "{44E33132-9427-4E52-B105-67A8BC2BC29E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authentication", "authentication", "{E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.QQ", "framework\authentication\LINGYUN.Abp.Authentication.QQ\LINGYUN.Abp.Authentication.QQ.csproj", "{D3008465-B344-4243-B14A-A1430E2BEC48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.WeChat", "framework\authentication\LINGYUN.Abp.Authentication.WeChat\LINGYUN.Abp.Authentication.WeChat.csproj", "{3CBA6005-B412-4D2A-8F1E-01D53D5C657E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.LinkUser", "modules\openIddict\LINGYUN.Abp.OpenIddict.LinkUser\LINGYUN.Abp.OpenIddict.LinkUser.csproj", "{15EC4A03-D172-4984-B9CA-2C73929838DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Sms", "modules\openIddict\LINGYUN.Abp.OpenIddict.Sms\LINGYUN.Abp.OpenIddict.Sms.csproj", "{74C13BCC-A5A5-40FA-81E8-83DCCF760148}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat\LINGYUN.Abp.OpenIddict.WeChat.csproj", "{427382F6-3153-47A2-BBC4-88F6EA116A8F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator.Tests", "tests\LINGYUN.Abp.IdGenerator.Tests\LINGYUN.Abp.IdGenerator.Tests.csproj", "{2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Senparc", "framework\wechat\LINGYUN.Abp.WeChat.Official.Senparc\LINGYUN.Abp.WeChat.Official.Senparc.csproj", "{CA8D7141-9520-46AC-83FD-6E034AD6EBDD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Core", "modules\webhooks\LINGYUN.Abp.Webhooks.Core\LINGYUN.Abp.Webhooks.Core.csproj", "{42FD76A3-803A-4E07-8A90-4269204B7B87}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime-notifications", "realtime-notifications", "{1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain.Shared", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain.Shared\LINGYUN.Abp.Notifications.Domain.Shared.csproj", "{4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain\LINGYUN.Abp.Notifications.Domain.csproj", "{CDD4CC0F-5493-40C2-B889-3670263888D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.EntityFrameworkCore", "modules\realtime-notifications\LINGYUN.Abp.Notifications.EntityFrameworkCore\LINGYUN.Abp.Notifications.EntityFrameworkCore.csproj", "{F74AAE01-7B87-44CA-85ED-9A6307D51504}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application.Contracts", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application.Contracts\LINGYUN.Abp.Notifications.Application.Contracts.csproj", "{E3F010C7-6C96-4EEA-B5FA-BF80515E195F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application\LINGYUN.Abp.Notifications.Application.csproj", "{B153F98A-7DA9-4A12-A1D7-105BE9408FA1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.HttpApi", "modules\realtime-notifications\LINGYUN.Abp.Notifications.HttpApi\LINGYUN.Abp.Notifications.HttpApi.csproj", "{EFC5C34F-81A1-4EFC-966F-50B646C54FA6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = ".github", ".github", "{52E60F16-6304-4E37-A220-C94D8C5D27DC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflows", "workflows", "{F3E04039-7BEE-46F8-B33B-FE13E977DCCA}" - ProjectSection(SolutionItems) = preProject - ..\.github\workflows\build.yml = ..\.github\workflows\build.yml - ..\.github\workflows\publish.yml = ..\.github\workflows\publish.yml - ..\.github\workflows\release.yml = ..\.github\workflows\release.yml - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application.Contracts", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application.Contracts\LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj", "{35D17AF3-FDCD-4704-969C-E82DBCC0A232}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application\LINGYUN.Abp.PermissionManagement.Application.csproj", "{984F481B-79FF-4825-917B-944F151694BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.HttpApi", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.HttpApi\LINGYUN.Abp.PermissionManagement.HttpApi.csproj", "{B12BECC4-8A58-4DBD-A5CD-144A507972BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "feature-management", "feature-management", "{12896A3F-5F7E-4192-8A58-E1D2527109D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application.Contracts", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application.Contracts\LINGYUN.Abp.FeatureManagement.Application.Contracts.csproj", "{F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application\LINGYUN.Abp.FeatureManagement.Application.csproj", "{4E8DA436-8FAF-4028-8A0C-E4EEB3615972}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.HttpApi", "modules\feature-management\LINGYUN.Abp.FeatureManagement.HttpApi\LINGYUN.Abp.FeatureManagement.HttpApi.csproj", "{405694F8-0051-4DAE-A991-919FAC36C7DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules-management", "rules-management", "{5F0BB690-0FBB-455A-AE9A-8BA914AA78F6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules-engine", "rules-engine", "{F7103498-8B5B-4698-AACE-9E949F732E77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Domain.Shared", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Domain.Shared\LINGYUN.Abp.RulesEngineManagement.Domain.Shared.csproj", "{2EAA690B-1395-4952-95A0-A52F929028C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Domain", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Domain\LINGYUN.Abp.RulesEngineManagement.Domain.csproj", "{722FE012-8F23-4558-9E8F-A37C02902058}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Application.Contracts", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Application.Contracts\LINGYUN.Abp.RulesEngineManagement.Application.Contracts.csproj", "{79D3C6D6-6433-471D-B354-477E07CB08EE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.Application", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.Application\LINGYUN.Abp.RulesEngineManagement.Application.csproj", "{5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore\LINGYUN.Abp.RulesEngineManagement.EntityFrameworkCore.csproj", "{4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RulesEngineManagement.HttpApi", "modules\rules-management\rules-engine\LINGYUN.Abp.RulesEngineManagement.HttpApi\LINGYUN.Abp.RulesEngineManagement.HttpApi.csproj", "{97062425-3379-4F8D-BFA2-D445C56C0801}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Portal", "modules\identityServer\LINGYUN.Abp.IdentityServer.Portal\LINGYUN.Abp.IdentityServer.Portal.csproj", "{5B20BA13-40FF-4743-AEEE-2E3F887F50C6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Portal", "modules\openIddict\LINGYUN.Abp.OpenIddict.Portal\LINGYUN.Abp.OpenIddict.Portal.csproj", "{03EC70B8-912C-4FBE-94DD-6327F4F23021}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa", "elsa", "{0A00FAF9-A96B-4BF5-8D42-15C8678F70F3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa", "modules\elsa\LINGYUN.Abp.Elsa\LINGYUN.Abp.Elsa.csproj", "{C037F0CE-8223-4D4A-B15F-18B7D6AA447F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities", "modules\elsa\LINGYUN.Abp.Elsa.Activities\LINGYUN.Abp.Elsa.Activities.csproj", "{E293BB96-5054-497B-BCE5-64AF9B0457B1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.BlobStoring", "modules\elsa\LINGYUN.Abp.Elsa.Activities.BlobStoring\LINGYUN.Abp.Elsa.Activities.BlobStoring.csproj", "{FB7AF3F8-44CD-4732-8A25-A43902437B89}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Emailing", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Emailing\LINGYUN.Abp.Elsa.Activities.Emailing.csproj", "{6472B3C1-C237-49CD-82C8-821AD001096A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.IM", "modules\elsa\LINGYUN.Abp.Elsa.Activities.IM\LINGYUN.Abp.Elsa.Activities.IM.csproj", "{4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Notifications\LINGYUN.Abp.Elsa.Activities.Notifications.csproj", "{FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Sms", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Sms\LINGYUN.Abp.Elsa.Activities.Sms.csproj", "{47D57848-A910-4869-8A46-84E40A985FEE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Webhooks", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Webhooks\LINGYUN.Abp.Elsa.Activities.Webhooks.csproj", "{8A1F9647-B773-40AB-9126-30868014AE58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore\LINGYUN.Abp.Elsa.EntityFrameworkCore.csproj", "{4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj", "{10CF8240-4276-4199-B3D1-C45F16468EBD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Notifications\LINGYUN.Abp.Elsa.Notifications.csproj", "{39DFEFCD-7C73-450F-9A2F-7426188A890B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Server", "modules\elsa\LINGYUN.Abp.Elsa.Server\LINGYUN.Abp.Elsa.Server.csproj", "{C465BB41-9DB7-470F-BC7F-A59D2A7D6083}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "entity-change", "entity-change", "{DD1B10ED-73E2-41BE-928A-46501050FE2A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.Application.Contracts", "framework\entity-change\LINGYUN.Abp.EntityChange.Application.Contracts\LINGYUN.Abp.EntityChange.Application.Contracts.csproj", "{7779D9BD-5928-49A2-965F-537967004238}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.Application", "framework\entity-change\LINGYUN.Abp.EntityChange.Application\LINGYUN.Abp.EntityChange.Application.csproj", "{AC41F335-E240-47E0-B409-AFAD1400E626}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityChange.HttpApi", "framework\entity-change\LINGYUN.Abp.EntityChange.HttpApi\LINGYUN.Abp.EntityChange.HttpApi.csproj", "{1D420BA6-2155-4E0D-AAAF-EECC0330A38C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cli", "cli", "{59627844-A66A-46AC-B882-E8F302D0EC24}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Cli", "framework\cli\LINGYUN.Abp.Cli\LINGYUN.Abp.Cli.csproj", "{2F49E870-DAE2-4D89-98CA-46BBD91C68E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{E4CEED06-B8E9-41FA-82BF-5401AE101C4B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Tests", "tests\LINGYUN.Abp.WeChat.Work.Tests\LINGYUN.Abp.WeChat.Work.Tests.csproj", "{9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application.Contracts\LINGYUN.Abp.WeChat.Work.Application.Contracts.csproj", "{B4C8056F-7325-4DB1-9F09-A6F37B052192}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj", "{D5AEBB8E-713C-4DD2-BA18-7B0B48489901}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj", "{CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat.Work", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat.Work\LINGYUN.Abp.IdentityServer.WeChat.Work.csproj", "{DEDB69A9-657F-4B8B-81A7-4ADB19664F35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat.Work", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat.Work\LINGYUN.Abp.OpenIddict.WeChat.Work.csproj", "{2C86306D-D626-41F8-BA3C-5C9B4123CE7D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.Work", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.Work\LINGYUN.Abp.Notifications.WeChat.Work.csproj", "{2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat.Work", "framework\wechat\LINGYUN.Abp.Identity.WeChat.Work\LINGYUN.Abp.Identity.WeChat.Work.csproj", "{3E32DBDA-1C63-42B4-85D1-E84BBD072D89}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "nexus", "nexus", "{87CE2F0B-0469-4C76-B325-00EA7AB94B99}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Nexus", "framework\nexus\LINGYUN.Abp.BlobStoring.Nexus\LINGYUN.Abp.BlobStoring.Nexus.csproj", "{34987F45-8234-428C-AB41-783D42295C32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Nexus.Tests", "tests\LINGYUN.Abp.BlobStoring.Nexus.Tests\LINGYUN.Abp.BlobStoring.Nexus.Tests.csproj", "{227DA969-291B-4749-985C-7A83523B7F53}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sonatype.Nexus", "framework\nexus\LINGYUN.Abp.Sonatype.Nexus\LINGYUN.Abp.Sonatype.Nexus.csproj", "{CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Nexus.Tests", "tests\LINGYUN.Abp.OssManagement.Nexus.Tests\LINGYUN.Abp.OssManagement.Nexus.Tests.csproj", "{F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{D52D5A11-78EF-4154-8298-267738A6715B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exception-handling", "exception-handling", "{11CDB632-9A54-439F-8B68-32B3C775BC3A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hangfire", "hangfire", "{C6D62079-B3F5-4006-AA49-3BF12C4805BB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wrapper", "wrapper", "{848F6760-9B11-4C9A-9843-9D71DD66D9DA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "location", "location", "{6255DBAD-A388-4418-A5EB-C79630786028}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Nexus", "modules\oss-management\LINGYUN.Abp.OssManagement.Nexus\LINGYUN.Abp.OssManagement.Nexus.csproj", "{A025B8D2-5D92-4023-82AB-97A672A5A132}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{E09E476C-9DF8-46AC-848E-4E7635369117}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{E414F7BC-215C-46D0-99EC-CD78EB31FC3C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{8142FB8C-3D32-4062-BD95-B2F61A1A390A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{4155336A-DC06-4885-878D-03AF5DFAF47D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Emailing", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Emailing\LINGYUN.Abp.Notifications.Emailing.csproj", "{ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Jobs", "modules\task-management\LINGYUN.Abp.Notifications.Jobs\LINGYUN.Abp.Notifications.Jobs.csproj", "{1B112FAC-CB57-48B6-A3D5-95456477CB8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\realtime-notifications\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{B84E4D98-0B10-4189-8572-F6F7B4E384B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{E81EC3E4-521F-4C52-8AA0-A783847E764E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Saas", "modules\saas\LINGYUN.Abp.MultiTenancy.Saas\LINGYUN.Abp.MultiTenancy.Saas.csproj", "{49EB2864-B715-47DD-AE47-C5243C656F47}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{A057F430-AD93-49D9-8080-6E074AF05694}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\realtime-notifications\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{68538541-4280-46F5-BA08-99ACA8575615}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "framework\settings\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{F6F93723-5BC3-4D25-A83E-25B41B6D956F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{77ED7922-BF30-4436-8A85-78F812583913}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{109BF321-1BC6-4031-A59B-7B5375EBA8C5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Common", "framework\wechat\LINGYUN.Abp.WeChat.Common\LINGYUN.Abp.WeChat.Common.csproj", "{08A78A69-913B-4C5E-BCE0-739585F82D1E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dynamic-queryable", "dynamic-queryable", "{4FAE314C-36CB-4E3F-85B7-41D0A428B37D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable", "framework\dynamic-queryable\LINGYUN.Linq.Dynamic.Queryable\LINGYUN.Linq.Dynamic.Queryable.csproj", "{B6857FC4-97C2-4E20-B005-1FAABC574B88}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application.Contracts", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts.csproj", "{B6D4AADE-3ABA-45E6-9916-2F8798412549}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application\LINGYUN.Abp.Dynamic.Queryable.Application.csproj", "{86E85013-7C71-4770-9323-18897A64F5B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.HttpApi", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.HttpApi\LINGYUN.Abp.Dynamic.Queryable.HttpApi.csproj", "{014A9583-0EAA-48A4-ACBE-07DC88159E13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Tests", "tests\LINGYUN.Abp.DataProtection.Tests\LINGYUN.Abp.DataProtection.Tests.csproj", "{AAC0C407-B4B9-4E90-99FC-2D793AC229D9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "security", "security", "{9D1302BE-3886-49F8-B0CD-35D2AC1E5A37}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Security", "framework\security\LINGYUN.Abp.Security\LINGYUN.Abp.Security.csproj", "{4C71CA88-0D04-4DDB-8906-B953908B8B8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Jobs", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Jobs\LINGYUN.Abp.BackgroundTasks.Jobs.csproj", "{50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.TaskManagement", "modules\task-management\LINGYUN.Abp.BackgroundTasks.TaskManagement\LINGYUN.Abp.BackgroundTasks.TaskManagement.csproj", "{1E00BE51-A1AE-447D-B6E0-F28EC12B259A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application.Contracts", "modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj", "{61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi.Client", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi.Client\LINGYUN.Abp.TaskManagement.HttpApi.Client.csproj", "{72D54834-7ADF-4B18-A745-FCBBC255073B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{F6A9D966-0022-440B-AE27-564A74CDED48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain.Shared", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain.Shared\LINGYUN.Abp.DataProtectionManagement.Domain.Shared.csproj", "{8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain\LINGYUN.Abp.DataProtectionManagement.Domain.csproj", "{6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore.csproj", "{D73200F6-CBB3-4BA8-B9BF-7110AAF05596}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Wrapper", "framework\common\LINGYUN.Abp.AspNetCore.Wrapper\LINGYUN.Abp.AspNetCore.Wrapper.csproj", "{30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application.Contracts", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application.Contracts\LINGYUN.Abp.DataProtectionManagement.Application.Contracts.csproj", "{40D7A0A3-68BD-431E-A67A-E2A35508D55D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application\LINGYUN.Abp.DataProtectionManagement.Application.csproj", "{8EA8C998-F81A-46E9-8C7E-C944D2503A0A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Abstractions", "framework\data-protection\LINGYUN.Abp.DataProtection.Abstractions\LINGYUN.Abp.DataProtection.Abstractions.csproj", "{47550AB9-FA06-42D6-A4B8-7DD12FE66563}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.HttpApi", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.HttpApi\LINGYUN.Abp.DataProtectionManagement.HttpApi.csproj", "{835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.IdentityServer", "framework\open-api\LINGYUN.Abp.OpenApi.IdentityServer\LINGYUN.Abp.OpenApi.IdentityServer.csproj", "{FDAAAD2E-42A7-44EC-8971-B5277FD6D404}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.OpenIddict", "framework\open-api\LINGYUN.Abp.OpenApi.OpenIddict\LINGYUN.Abp.OpenApi.OpenIddict.csproj", "{ED3DF100-C5DB-4334-A847-118922B28D95}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Scriban", "modules\text-templating\LINGYUN.Abp.TextTemplating.Scriban\LINGYUN.Abp.TextTemplating.Scriban.csproj", "{15482834-9242-4D20-9736-9DA571A9A83A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{8A255A72-50FC-460E-9897-FA53F455580B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Common", "framework\wechat\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj", "{CED33625-A034-475B-A4C0-A4E7D1BADD10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{E3BA2413-5755-4F61-9A7C-5D49AE9E7016}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{BF85DB7F-70C2-4804-AA57-FACE204981DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Session", "modules\identityServer\LINGYUN.Abp.IdentityServer.Session\LINGYUN.Abp.IdentityServer.Session.csproj", "{893F7376-0913-43DC-AD3D-40AF5B8F9E3B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.AspNetCore.Session", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.Session\LINGYUN.Abp.Identity.AspNetCore.Session.csproj", "{8826831D-8733-473A-B47B-A30C3732B13D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.AspNetCore.Session", "modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore.Session\LINGYUN.Abp.OpenIddict.AspNetCore.Session.csproj", "{D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Notifications", "modules\identity\LINGYUN.Abp.Identity.Notifications\LINGYUN.Abp.Identity.Notifications.csproj", "{54BBA043-317B-4A4F-B583-513D08BC25A7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{79FA2CBA-2904-4D80-A217-DCC0A38F93C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Official.Handlers\LINGYUN.Abp.WeChat.Official.Handlers.csproj", "{E469F047-6AD0-4D2B-9900-46358DA3BC30}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{EB9F1905-1798-4766-8347-A8D2A9DBFAED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio.Tests", "tests\LINGYUN.Abp.OssManagement.Minio.Tests\LINGYUN.Abp.OssManagement.Minio.Tests.csproj", "{CCE5C620-E17A-4EB1-A17A-9F90311B197D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Tests", "tests\LINGYUN.Abp.OssManagement.Domain.Tests\LINGYUN.Abp.OssManagement.Domain.Tests.csproj", "{F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.ImageSharp", "modules\oss-management\LINGYUN.Abp.OssManagement.ImageSharp\LINGYUN.Abp.OssManagement.ImageSharp.csproj", "{76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj", "{267933BD-BFB8-4906-BA39-DF193B2FD558}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Notifications.HttpApi.Client", "modules\realtime-notifications\LINGYUN.Abp.Notifications.HttpApi.Client\LINGYUN.Abp.Notifications.HttpApi.Client.csproj", "{3CBD1342-C021-49FB-933F-FAC1DAFC7B48}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform", "modules\platform\LINGYUN.Abp.Sms.Platform\LINGYUN.Abp.Sms.Platform.csproj", "{01B86C39-B0C8-48A4-949C-1C63D755B02C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform", "modules\platform\LINGYUN.Abp.Emailing.Platform\LINGYUN.Abp.Emailing.Platform.csproj", "{DD6609C7-07AC-49FD-B588-44E649D0AE6E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform.Tests", "tests\LINGYUN.Abp.Sms.Platform.Tests\LINGYUN.Abp.Sms.Platform.Tests.csproj", "{856B4ACA-BD13-417F-A6E2-0F401F877189}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.HttpApi.Client", "modules\platform\LINGYUN.Platform.HttpApi.Client\LINGYUN.Platform.HttpApi.Client.csproj", "{B52B199C-0E1C-4CE9-B066-71D26F618424}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform.Tests", "tests\LINGYUN.Abp.Emailing.Platform.Tests\LINGYUN.Abp.Emailing.Platform.Tests.csproj", "{80F44B5B-F8FF-47FA-9A77-BE2D176B2721}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gdpr", "gdpr", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Shared", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Shared\LINGYUN.Abp.Gdpr.Domain.Shared.csproj", "{DD365101-E8FC-6516-2883-B9CA024B36FA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain\LINGYUN.Abp.Gdpr.Domain.csproj", "{C330BADD-59A0-A3CD-E839-A0D4C2C636EE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Identity", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Identity\LINGYUN.Abp.Gdpr.Domain.Identity.csproj", "{F1C6C6B6-5B99-5AA6-7F76-27560C111605}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application.Contracts", "modules\gdpr\LINGYUN.Abp.Gdpr.Application.Contracts\LINGYUN.Abp.Gdpr.Application.Contracts.csproj", "{459DA653-F12A-65B5-41EF-A5877B1C38BA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application", "modules\gdpr\LINGYUN.Abp.Gdpr.Application\LINGYUN.Abp.Gdpr.Application.csproj", "{9DD70A99-41A6-8598-553E-2B5AB6277035}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.EntityFrameworkCore", "modules\gdpr\LINGYUN.Abp.Gdpr.EntityFrameworkCore\LINGYUN.Abp.Gdpr.EntityFrameworkCore.csproj", "{016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi\LINGYUN.Abp.Gdpr.HttpApi.csproj", "{F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Encryption.SM4", "framework\security\LINGYUN.Abp.Encryption.SM4\LINGYUN.Abp.Encryption.SM4.csproj", "{AE00DA82-B33A-CAF7-D9CD-D5E26608741B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{F9A0D88F-53AE-4AC7-8E15-163C34386E7C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.IdentityServer", "modules\account\LINGYUN.Abp.Account.Web.IdentityServer\LINGYUN.Abp.Account.Web.IdentityServer.csproj", "{0FF0A04C-B580-4A56-9171-CF2988B5DE5A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OpenIddict", "modules\account\LINGYUN.Abp.Account.Web.OpenIddict\LINGYUN.Abp.Account.Web.OpenIddict.csproj", "{F810C8A8-1256-440F-BAAF-7F3588291963}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.HttpApi.Client", "modules\account\LINGYUN.Abp.Account.HttpApi.Client\LINGYUN.Abp.Account.HttpApi.Client.csproj", "{FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi.Client", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi.Client\LINGYUN.Abp.Gdpr.HttpApi.Client.csproj", "{C95DE287-9D21-4DCD-9281-A060B6D99774}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Web", "modules\gdpr\LINGYUN.Abp.Gdpr.Web\LINGYUN.Abp.Gdpr.Web.csproj", "{96748DAE-D367-48C0-B64E-2F25010EAC4D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exporter", "exporter", "{A4633711-7FB6-411A-8D08-BB9A0A778046}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Core", "framework\exporter\LINGYUN.Abp.Exporter.Core\LINGYUN.Abp.Exporter.Core.csproj", "{5A0063BF-EE72-E688-84C6-9E3CE0616C94}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.MiniExcel", "framework\exporter\LINGYUN.Abp.Exporter.MiniExcel\LINGYUN.Abp.Exporter.MiniExcel.csproj", "{ECE61F58-1AEC-1E4F-1543-76C2242B6F70}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.MagicodesIE.Excel", "framework\exporter\LINGYUN.Abp.Exporter.MagicodesIE.Excel\LINGYUN.Abp.Exporter.MagicodesIE.Excel.csproj", "{B7B63E08-8F62-34F6-FEA5-063267F1FC85}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Auditing.HttpApi.Client", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi.Client\LINGYUN.Abp.Auditing.HttpApi.Client.csproj", "{7C48C1CA-7E53-4261-A477-454DD3A8402C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.AspNetCore", "framework\wechat\LINGYUN.Abp.WeChat.Work.AspNetCore\LINGYUN.Abp.WeChat.Work.AspNetCore.csproj", "{A54344EB-05A7-A405-5368-4A9C0A60B078}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.QrCode", "modules\identity\LINGYUN.Abp.Identity.QrCode\LINGYUN.Abp.Identity.QrCode.csproj", "{7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.AspNetCore.QrCode", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.QrCode\LINGYUN.Abp.Identity.AspNetCore.QrCode.csproj", "{C9266D5D-3860-09C3-F566-489BBB57A534}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tracking", "tracking", "{21542881-C560-4CBB-8AB1-CF757071A057}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.APM", "framework\telemetry\LINGYUN.Abp.Telemetry.APM\LINGYUN.Abp.Telemetry.APM.csproj", "{F3DF1C3E-7319-48B1-81AB-0284853BB567}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{7D7561CB-5059-4F5F-B736-B97195B46A91}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP.Location", "framework\common\LINGYUN.Abp.IP.Location\LINGYUN.Abp.IP.Location.csproj", "{418EE258-2670-29D3-480F-EC0FD07700E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP2Region", "framework\common\LINGYUN.Abp.IP2Region\LINGYUN.Abp.IP2Region.csproj", "{7984F6B6-726F-9F30-3B6F-08A90AD75A7D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AuditLogging.IP.Location", "framework\auditing\LINGYUN.Abp.AuditLogging.IP.Location\LINGYUN.Abp.AuditLogging.IP.Location.csproj", "{D63FEED3-2342-7E96-4121-B0C19CF1EA81}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.DbChecker", "modules\saas\LINGYUN.Abp.Saas.DbChecker\LINGYUN.Abp.Saas.DbChecker.csproj", "{DED16774-635C-D781-4D5B-D1FA56EECF10}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin5", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5.csproj", "{4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OAuth", "modules\account\LINGYUN.Abp.Account.Web.OAuth\LINGYUN.Abp.Account.Web.OAuth.csproj", "{DD11D070-F39E-1C41-1843-AE3ADBE501EF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.OAuth", "modules\account\LINGYUN.Abp.Account.OAuth\LINGYUN.Abp.Account.OAuth.csproj", "{001D0817-1EED-4C04-821E-F815F148EC90}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf", "framework\exporter\LINGYUN.Abp.Exporter.Pdf\LINGYUN.Abp.Exporter.Pdf.csproj", "{546E4417-5409-40F4-A125-E08329DD82BB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf.LibreOffice", "framework\exporter\LINGYUN.Abp.Exporter.Pdf.LibreOffice\LINGYUN.Abp.Exporter.Pdf.LibreOffice.csproj", "{738A72FB-ED83-4127-AA3B-59BF90635F8F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Exporter.Pdf.SpireLib", "framework\exporter\LINGYUN.Abp.Exporter.Pdf.SpireLib\LINGYUN.Abp.Exporter.Pdf.SpireLib.csproj", "{9950639D-AA4C-4FF1-A65E-9790EB561C8A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Security", "modules\account\LINGYUN.Abp.Account.Security\LINGYUN.Abp.Account.Security.csproj", "{5FA85E8E-3276-43DF-CC93-6A9847905166}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AspNetCore.MultiTenancy", "framework\tenants\LINGYUN.Abp.AspNetCore.MultiTenancy\LINGYUN.Abp.AspNetCore.MultiTenancy.csproj", "{AEEA81D6-B282-93CF-862B-9FCF1A5052F7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Contacts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Contacts\LINGYUN.Abp.WeChat.Work.Contacts.csproj", "{69419D6B-9DA5-D9BD-1D6C-61BBAE331057}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.ExternalContact", "framework\wechat\LINGYUN.Abp.WeChat.Work.ExternalContact\LINGYUN.Abp.WeChat.Work.ExternalContact.csproj", "{B4311504-B0C8-AC8D-02A5-81AD43B4087B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "aspire", "aspire", "{FAB71536-FCDB-4135-B61A-732B72FDA6A6}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.ServiceDefaults", "aspire\LINGYUN.Abp.MicroService.ServiceDefaults\LINGYUN.Abp.MicroService.ServiceDefaults.csproj", "{C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AppHost", "aspire\LINGYUN.Abp.MicroService.AppHost\LINGYUN.Abp.MicroService.AppHost.csproj", "{9FF83836-8627-2943-3344-60319FB85B39}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "admin-service", "admin-service", "{EB06B90A-D05C-486C-9787-BA5581664641}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AdminService", "aspire\LINGYUN.Abp.MicroService.AdminService\LINGYUN.Abp.MicroService.AdminService.csproj", "{2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform-service", "platform-service", "{1AE7D817-E837-4C25-9850-8AB11030713F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.PlatformService", "aspire\LINGYUN.Abp.MicroService.PlatformService\LINGYUN.Abp.MicroService.PlatformService.csproj", "{1B5368E2-8A31-F686-3120-770BAD793962}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore\LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore.csproj", "{BFFC0787-81F4-4751-9385-B91BB8CB183A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AdminService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.AdminService.DbMigrator\LINGYUN.Abp.MicroService.AdminService.DbMigrator.csproj", "{E0EEFE73-EF05-491B-A265-E2B613D0C82F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auth-server", "auth-server", "{A4EF0E36-156F-4D12-A6B0-3C681A1AE6A1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore\LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore.csproj", "{2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AuthServer.DbMigrator", "aspire\LINGYUN.Abp.MicroService.AuthServer.DbMigrator\LINGYUN.Abp.MicroService.AuthServer.DbMigrator.csproj", "{B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.AuthServer", "aspire\LINGYUN.Abp.MicroService.AuthServer\LINGYUN.Abp.MicroService.AuthServer.csproj", "{569667D0-2038-4566-9711-6B174C631063}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore\LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore.csproj", "{7760B229-E3EA-4A60-9E32-7B2F7FB199E7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.PlatformService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.PlatformService.DbMigrator\LINGYUN.Abp.MicroService.PlatformService.DbMigrator.csproj", "{3672F185-59B2-490D-A00B-5CA9815909B6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-service", "localization-service", "{2D8CA6FB-3FE7-4218-829E-0A1B36A5340D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.LocalizationService", "aspire\LINGYUN.Abp.MicroService.LocalizationService\LINGYUN.Abp.MicroService.LocalizationService.csproj", "{1B9DC76D-942D-4DCC-979F-E9E56BB7073E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.LocalizationService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.LocalizationService.EntityFrameworkCore\LINGYUN.Abp.MicroService.LocalizationService.EntityFrameworkCore.csproj", "{7F65C827-914D-42B1-AE26-44053AE3140F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.LocalizationService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.LocalizationService.DbMigrator\LINGYUN.Abp.MicroService.LocalizationService.DbMigrator.csproj", "{1425C1AB-048F-4ABF-ACAB-793E2524F0A8}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message-service", "message-service", "{647AB3E7-2F32-43D1-AFDC-877C7412F4DA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.MessageService", "aspire\LINGYUN.Abp.MicroService.MessageService\LINGYUN.Abp.MicroService.MessageService.csproj", "{4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.MessageService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.MessageService.DbMigrator\LINGYUN.Abp.MicroService.MessageService.DbMigrator.csproj", "{09B8B63F-972B-4055-9BAD-B2883EBA3EF0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore\LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore.csproj", "{4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlInstaller\LINGYUN.Abp.Quartz.SqlInstaller.csproj", "{0EEA73CA-D8DD-F044-045D-F070F8831E26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.MySqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.MySqlInstaller\LINGYUN.Abp.Quartz.MySqlInstaller.csproj", "{B6452D3F-E58C-C433-E52A-F65EE2657E01}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-service", "identity-service", "{19F90E75-657C-4542-A798-8E9CE9AF3128}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.IdentityService", "aspire\LINGYUN.Abp.MicroService.IdentityService\LINGYUN.Abp.MicroService.IdentityService.csproj", "{62FB9F56-221E-47D5-8B30-311A13D6A568}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-service", "task-service", "{9F260C45-199D-460C-A5C0-6C2B62594DFA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.TaskService", "aspire\LINGYUN.Abp.MicroService.TaskService\LINGYUN.Abp.MicroService.TaskService.csproj", "{ACEEA6F9-868B-4701-AF65-89292F656A1D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.TaskService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.TaskService.DbMigrator\LINGYUN.Abp.MicroService.TaskService.DbMigrator.csproj", "{FB12303C-7A3A-4A42-900F-C131D0FD7BA2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.TaskService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.TaskService.EntityFrameworkCore\LINGYUN.Abp.MicroService.TaskService.EntityFrameworkCore.csproj", "{BAE82F6F-2528-45DF-9571-F733C31CEB1E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.Domain.Shared", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain.Shared\LINGYUN.Abp.TaskManagement.Domain.Shared.csproj", "{97C66786-03F8-4886-088E-FA1BECB1C574}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.Domain", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain\LINGYUN.Abp.TaskManagement.Domain.csproj", "{7B927926-0AF4-A6F2-8ABA-331A6C138EAC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.EntityFrameworkCore", "modules\task-management\LINGYUN.Abp.TaskManagement.EntityFrameworkCore\LINGYUN.Abp.TaskManagement.EntityFrameworkCore.csproj", "{C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.BackgroundTasks.Notifications", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Notifications\LINGYUN.Abp.BackgroundTasks.Notifications.csproj", "{6FCE34BF-077B-9425-CD34-FA9B2CD190FA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.Application", "modules\task-management\LINGYUN.Abp.TaskManagement.Application\LINGYUN.Abp.TaskManagement.Application.csproj", "{A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.HttpApi", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi\LINGYUN.Abp.TaskManagement.HttpApi.csproj", "{107C0D30-35C1-142B-209A-29BD6BAE7DE9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhook-service", "webhook-service", "{D8AF0368-077D-4AAD-9929-43C598DE13B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.WebhookService", "aspire\LINGYUN.Abp.MicroService.WebhookService\LINGYUN.Abp.MicroService.WebhookService.csproj", "{DB03F47B-4E3A-4484-86DC-741472AD49A3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.WebhookService.DbMigrator", "aspire\LINGYUN.Abp.MicroService.WebhookService.DbMigrator\LINGYUN.Abp.MicroService.WebhookService.DbMigrator.csproj", "{2DB2EADB-745A-4442-A48A-B1B721412F78}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.WebhookService.EntityFrameworkCore", "aspire\LINGYUN.Abp.MicroService.WebhookService.EntityFrameworkCore\LINGYUN.Abp.MicroService.WebhookService.EntityFrameworkCore.csproj", "{4524F120-F72B-4373-B731-6A2D0EF633A7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Webhooks.EventBus", "modules\webhooks\LINGYUN.Abp.Webhooks.EventBus\LINGYUN.Abp.Webhooks.EventBus.csproj", "{0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Webhooks.Identity", "modules\webhooks\LINGYUN.Abp.Webhooks.Identity\LINGYUN.Abp.Webhooks.Identity.csproj", "{8880DC40-7C67-AEBC-AFD6-45094E65D01B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Webhooks.Saas", "modules\webhooks\LINGYUN.Abp.Webhooks.Saas\LINGYUN.Abp.Webhooks.Saas.csproj", "{DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.Domain.Shared", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain.Shared\LINGYUN.Abp.WebhooksManagement.Domain.Shared.csproj", "{A076DAB1-03F6-0592-4900-5CEF38A76026}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.Domain", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain\LINGYUN.Abp.WebhooksManagement.Domain.csproj", "{9CA173D6-B883-9629-EFB3-A37D89AAEE81}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.Application.Contracts", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application.Contracts\LINGYUN.Abp.WebhooksManagement.Application.Contracts.csproj", "{FDE1FE78-B568-3602-653D-2E641AD999D5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.Application", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application\LINGYUN.Abp.WebhooksManagement.Application.csproj", "{2F99A8DC-3A89-3004-66F2-B61158DA9F61}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore.csproj", "{4AC7962E-AB5E-BEE5-DC17-22A29FE73DED}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WebhooksManagement.HttpApi", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.HttpApi\LINGYUN.Abp.WebhooksManagement.HttpApi.csproj", "{E5343E6A-61DC-46E0-6A7A-9F93362AF113}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat-service", "wechat-service", "{125E78AC-071D-4F82-88CE-1D7D2D0AAFF4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.WeChatService", "aspire\LINGYUN.Abp.MicroService.WeChatService\LINGYUN.Abp.MicroService.WeChatService.csproj", "{A768070E-FF34-424C-9945-B75533E7ADD3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.OA", "framework\wechat\LINGYUN.Abp.WeChat.Work.OA\LINGYUN.Abp.WeChat.Work.OA.csproj", "{AB207B2A-C8E7-977D-98E6-66527CBB2B7F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Official.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application.Contracts\LINGYUN.Abp.WeChat.Official.Application.Contracts.csproj", "{AB981FD3-3523-CDEA-73C9-D6280400062C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Official.Application", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application\LINGYUN.Abp.WeChat.Official.Application.csproj", "{B760E50F-F5B6-1266-02A8-0056483F475B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Official.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Official.HttpApi\LINGYUN.Abp.WeChat.Official.HttpApi.csproj", "{CDD00CAC-4A4E-FAD5-E8C3-B833C2994314}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflow-service", "workflow-service", "{F38C6E5A-1C5F-49FF-9174-95430D6C91ED}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.WorkflowService", "aspire\LINGYUN.Abp.MicroService.WorkflowService\LINGYUN.Abp.MicroService.WorkflowService.csproj", "{56778F12-42F0-4288-B559-218FC5A3C323}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "project", "project", "{A72387FE-3361-45B3-AE7A-8BB212668A85}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.Domain.Shared", "modules\project\LINGYUN.Abp.ProjectManagement.Domain.Shared\LINGYUN.Abp.ProjectManagement.Domain.Shared.csproj", "{6120F990-8729-DD52-5CEA-F2295528ED07}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.Domain", "modules\project\LINGYUN.Abp.ProjectManagement.Domain\LINGYUN.Abp.ProjectManagement.Domain.csproj", "{32C35E78-BE23-2D27-F1B3-C2270E45B0C4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.Application.Contracts", "modules\project\LINGYUN.Abp.ProjectManagement.Application.Contracts\LINGYUN.Abp.ProjectManagement.Application.Contracts.csproj", "{9AC112AD-18C2-359E-6696-87B814A69E63}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.Application", "modules\project\LINGYUN.Abp.ProjectManagement.Application\LINGYUN.Abp.ProjectManagement.Application.csproj", "{B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.EntityFrameworkCore", "modules\project\LINGYUN.Abp.ProjectManagement.EntityFrameworkCore\LINGYUN.Abp.ProjectManagement.EntityFrameworkCore.csproj", "{D74CF5EA-4BE7-4F23-663A-490C29D7576A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ProjectManagement.HttpApi", "modules\project\LINGYUN.Abp.ProjectManagement.HttpApi\LINGYUN.Abp.ProjectManagement.HttpApi.csproj", "{73A8BAF3-10A7-1C52-7CFF-6301B730A458}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.PostgresSqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.PostgresSqlInstaller\LINGYUN.Abp.Quartz.PostgresSqlInstaller.csproj", "{CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql.csproj", "{52186445-5B56-EA32-F154-39F47D2FB235}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "api-gateway", "api-gateway", "{B856BFF0-8D0E-4C4A-97C7-5406E1B7613C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MicroService.ApiGateway", "aspire\LINGYUN.Abp.MicroService.ApiGateway\LINGYUN.Abp.MicroService.ApiGateway.csproj", "{410E0FFF-705D-4471-9E52-FF495096A945}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.BackgroundTasks.Quartz", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Quartz\LINGYUN.Abp.BackgroundTasks.Quartz.csproj", "{ABCAB030-29ED-8219-F1DB-39D16098805F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elasticsearch.Jobs", "modules\task-management\LINGYUN.Abp.Elasticsearch.Jobs\LINGYUN.Abp.Elasticsearch.Jobs.csproj", "{C4F5372D-3127-A2CA-3B22-B343D5E54EB5}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77BDEF2B-1A30-4E64-BC35-0DFC21091327}.Release|Any CPU.Build.0 = Release|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Debug|Any CPU.Build.0 = Debug|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.ActiveCfg = Release|Any CPU - {573B7B0E-3065-42DE-A391-EE026CE7A366}.Release|Any CPU.Build.0 = Release|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF}.Release|Any CPU.Build.0 = Release|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2}.Release|Any CPU.Build.0 = Release|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A584D040-95AC-4422-93FF-7B80532213F0}.Release|Any CPU.Build.0 = Release|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76249548-4344-4CD0-A0AC-12AC54184B58}.Release|Any CPU.Build.0 = Release|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978}.Release|Any CPU.Build.0 = Release|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB}.Release|Any CPU.Build.0 = Release|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B09385A-719C-4B83-B61E-0ECD5D2734BD}.Release|Any CPU.Build.0 = Release|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8E569C1C-2637-4D89-804C-50FBC83948FB}.Release|Any CPU.Build.0 = Release|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D}.Release|Any CPU.Build.0 = Release|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF1839EA-FB6B-4ED5-9804-E40427046D35}.Release|Any CPU.Build.0 = Release|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D}.Release|Any CPU.Build.0 = Release|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E4A0D87-C3CE-430F-A475-A6B68C116D96}.Release|Any CPU.Build.0 = Release|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B}.Release|Any CPU.Build.0 = Release|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDEECE0D-6F66-4053-948E-9AC021B97C8D}.Release|Any CPU.Build.0 = Release|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873}.Release|Any CPU.Build.0 = Release|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {371B293B-0CA9-4385-8EBB-5224332066D2}.Release|Any CPU.Build.0 = Release|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE}.Release|Any CPU.Build.0 = Release|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47CC8F7A-681D-42B9-AE04-78453782C1B6}.Release|Any CPU.Build.0 = Release|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F595CB9F-B117-4D62-A1AE-48599927DB36}.Release|Any CPU.Build.0 = Release|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5CF403B2-47C9-4E4E-8856-0294BDD64884}.Release|Any CPU.Build.0 = Release|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {059473BA-FAF9-405F-9985-33DDCA2E9F0D}.Release|Any CPU.Build.0 = Release|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B}.Release|Any CPU.Build.0 = Release|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED}.Release|Any CPU.Build.0 = Release|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31B03DCB-ED12-4412-867A-61E347D40D8C}.Release|Any CPU.Build.0 = Release|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB984240-EF03-416F-A9B2-F5CF169E04B7}.Release|Any CPU.Build.0 = Release|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415}.Release|Any CPU.Build.0 = Release|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Debug|Any CPU.Build.0 = Debug|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.ActiveCfg = Release|Any CPU - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259}.Release|Any CPU.Build.0 = Release|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB}.Release|Any CPU.Build.0 = Release|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1DA91161-8757-4A68-A0A1-8C94C36C9240}.Release|Any CPU.Build.0 = Release|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F135B9E8-3FFE-44E9-835B-7B6A928F4823}.Release|Any CPU.Build.0 = Release|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75A6D078-C19D-4030-88CC-C2A8608FF604}.Release|Any CPU.Build.0 = Release|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D895594-3FF5-4507-853A-CB65F2DB72ED}.Release|Any CPU.Build.0 = Release|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93}.Release|Any CPU.Build.0 = Release|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0655A0FB-59E8-4A9F-BAF5-47A89377F747}.Release|Any CPU.Build.0 = Release|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE}.Release|Any CPU.Build.0 = Release|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3D9B137-32DE-4018-8058-78AB17FCDF9C}.Release|Any CPU.Build.0 = Release|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F19C8B0F-A332-4190-9ABE-95790E0AE864}.Release|Any CPU.Build.0 = Release|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA}.Release|Any CPU.Build.0 = Release|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72DCA4CF-8B95-47C9-B02A-2671953B7987}.Release|Any CPU.Build.0 = Release|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E}.Release|Any CPU.Build.0 = Release|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0}.Release|Any CPU.Build.0 = Release|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86A67B8C-EFA0-4103-B60F-312F07C15A7A}.Release|Any CPU.Build.0 = Release|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED}.Release|Any CPU.Build.0 = Release|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6}.Release|Any CPU.Build.0 = Release|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90}.Release|Any CPU.Build.0 = Release|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F359AAA1-C854-444A-88F2-1C0D8A07F864}.Release|Any CPU.Build.0 = Release|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D0ED1FC-3A7C-4531-9512-832E73AD9555}.Release|Any CPU.Build.0 = Release|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BF7FB73-0C62-4ECF-99F0-0583855D2777}.Release|Any CPU.Build.0 = Release|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FE7E243-2D99-4567-8786-6C9283D608EF}.Release|Any CPU.Build.0 = Release|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED}.Release|Any CPU.Build.0 = Release|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6}.Release|Any CPU.Build.0 = Release|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F12F4645-C0FE-4129-8C71-65B4039DC445}.Release|Any CPU.Build.0 = Release|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C457FA70-8732-44B8-A018-C96D14025D4B}.Release|Any CPU.Build.0 = Release|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7071E78B-755B-410A-830B-AA05D7168944}.Release|Any CPU.Build.0 = Release|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87B65CBD-0FF4-4FB5-9ABC-161911A71179}.Release|Any CPU.Build.0 = Release|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F40F88F1-CA90-4A79-B772-80E287E25982}.Release|Any CPU.Build.0 = Release|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F}.Release|Any CPU.Build.0 = Release|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F}.Release|Any CPU.Build.0 = Release|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAE74ABC-1096-495F-A624-BEBFBC1896F2}.Release|Any CPU.Build.0 = Release|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E92A1CAA-5758-41EF-B67E-C0D394E85417}.Release|Any CPU.Build.0 = Release|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F18DE651-A3E4-478F-A2B5-686429729EB8}.Release|Any CPU.Build.0 = Release|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42309C06-C0F2-490F-931B-CF41FA1970FF}.Release|Any CPU.Build.0 = Release|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296}.Release|Any CPU.Build.0 = Release|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91}.Release|Any CPU.Build.0 = Release|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC}.Release|Any CPU.Build.0 = Release|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97B4A37E-B93E-48C9-95D5-689CB9495D8B}.Release|Any CPU.Build.0 = Release|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C}.Release|Any CPU.Build.0 = Release|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B86EBB6F-A27F-4277-8265-937951A9DCB0}.Release|Any CPU.Build.0 = Release|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35B17218-9FB6-439E-AF73-9A1454BC923C}.Release|Any CPU.Build.0 = Release|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5036D3F-1C53-47EE-BA50-AD290AE062D7}.Release|Any CPU.Build.0 = Release|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD74BE00-54E4-4979-8797-E8027695F396}.Release|Any CPU.Build.0 = Release|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48DE251A-3482-4934-BC26-F99D2235AC9F}.Release|Any CPU.Build.0 = Release|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93}.Release|Any CPU.Build.0 = Release|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C892CD81-50AE-49E5-BF44-A0C28A1614CC}.Release|Any CPU.Build.0 = Release|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039}.Release|Any CPU.Build.0 = Release|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Debug|Any CPU.Build.0 = Debug|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {84868710-ECBB-4025-900A-EEB99EC49534}.Release|Any CPU.Build.0 = Release|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED}.Release|Any CPU.Build.0 = Release|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BE18D72-0D02-4854-966E-745CE5DAF77F}.Release|Any CPU.Build.0 = Release|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD}.Release|Any CPU.Build.0 = Release|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06D34108-01BA-4C77-A704-4DD9E6F7E32C}.Release|Any CPU.Build.0 = Release|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A98C939C-9F48-414A-A2D3-853BE4447397}.Release|Any CPU.Build.0 = Release|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93}.Release|Any CPU.Build.0 = Release|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBE91498-D83B-4873-A67E-0FB9D1C366F0}.Release|Any CPU.Build.0 = Release|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF}.Release|Any CPU.Build.0 = Release|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34BB9810-2983-4E55-A96A-132D32310145}.Release|Any CPU.Build.0 = Release|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498}.Release|Any CPU.Build.0 = Release|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EF31071-3521-409D-9740-BBFBFC04C50E}.Release|Any CPU.Build.0 = Release|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13219C1C-23E1-4EBA-93FB-86830C93A800}.Release|Any CPU.Build.0 = Release|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60D0BEF2-FEAF-4066-8377-6C873CB24858}.Release|Any CPU.Build.0 = Release|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {340BE5AC-68EC-41A5-9D0D-266037C58F13}.Release|Any CPU.Build.0 = Release|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC518F26-996E-4DF0-BB44-783EB1C275D2}.Release|Any CPU.Build.0 = Release|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63D1DC91-C7C7-491A-8423-B0B89F39443F}.Release|Any CPU.Build.0 = Release|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E0E82D2-F53A-4326-9E39-D7D677590543}.Release|Any CPU.Build.0 = Release|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9}.Release|Any CPU.Build.0 = Release|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C3D4C1C-4864-44A9-8649-9856ABF667FA}.Release|Any CPU.Build.0 = Release|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A}.Release|Any CPU.Build.0 = Release|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F71A0D28-397D-4094-B1C2-7925E1310676}.Release|Any CPU.Build.0 = Release|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CEAF0044-28D3-4585-B69D-D65FF6D4745E}.Release|Any CPU.Build.0 = Release|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3}.Release|Any CPU.Build.0 = Release|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FD04A084-BB8A-4733-B9C5-FACF40342A8A}.Release|Any CPU.Build.0 = Release|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67A76560-D39F-4D49-B858-B476E1DFE37B}.Release|Any CPU.Build.0 = Release|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F}.Release|Any CPU.Build.0 = Release|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93317D44-835C-4F5E-B85D-580D51D5FFF4}.Release|Any CPU.Build.0 = Release|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAF80936-FBEC-45AB-92DF-34966B0148FD}.Release|Any CPU.Build.0 = Release|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Debug|Any CPU.Build.0 = Debug|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.ActiveCfg = Release|Any CPU - {995756A1-A379-4797-89F0-87D219B5AF00}.Release|Any CPU.Build.0 = Release|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16}.Release|Any CPU.Build.0 = Release|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Debug|Any CPU.Build.0 = Debug|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Release|Any CPU.ActiveCfg = Release|Any CPU - {842E19B3-8110-40FE-AAFF-D288BC928E55}.Release|Any CPU.Build.0 = Release|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1319EC1-A489-482B-A343-38B52D8AB0B0}.Release|Any CPU.Build.0 = Release|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4059F87E-9762-46C1-AEB1-B1128EA533AE}.Release|Any CPU.Build.0 = Release|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Debug|Any CPU.Build.0 = Debug|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Release|Any CPU.ActiveCfg = Release|Any CPU - {433AD1FB-2DE8-479F-B89E-A17217591538}.Release|Any CPU.Build.0 = Release|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {65311EC9-7A86-4E73-A587-F06A99474EDD}.Release|Any CPU.Build.0 = Release|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD9081C6-7CA0-4A93-9318-33E54F3ED275}.Release|Any CPU.Build.0 = Release|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D262405E-1C72-4F14-A799-40471BAD48DC}.Release|Any CPU.Build.0 = Release|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156}.Release|Any CPU.Build.0 = Release|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D}.Release|Any CPU.Build.0 = Release|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Debug|Any CPU.Build.0 = Debug|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Release|Any CPU.ActiveCfg = Release|Any CPU - {440C9BD9-85EA-4473-AB1C-7C3562DF4915}.Release|Any CPU.Build.0 = Release|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23C3B247-523A-4FBF-B785-2F035E0089BD}.Release|Any CPU.Build.0 = Release|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C7CF4193-6397-4450-AF42-3BACD7CF292E}.Release|Any CPU.Build.0 = Release|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FE2725C-6829-4778-93BA-A53260697AFB}.Release|Any CPU.Build.0 = Release|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4B972EC-9F0B-4405-9965-766FABC9B07E}.Release|Any CPU.Build.0 = Release|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31E60E23-FD98-4D5E-A137-2B3F2968BA09}.Release|Any CPU.Build.0 = Release|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3}.Release|Any CPU.Build.0 = Release|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F}.Release|Any CPU.Build.0 = Release|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A030CD8E-61F3-4C15-B28A-C301446DDBEC}.Release|Any CPU.Build.0 = Release|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4}.Release|Any CPU.Build.0 = Release|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1BE6113-3439-45BB-8B58-20ACA4056895}.Release|Any CPU.Build.0 = Release|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77C2E24A-D143-44E7-86F9-AB6C5D444F63}.Release|Any CPU.Build.0 = Release|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3}.Release|Any CPU.Build.0 = Release|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5}.Release|Any CPU.Build.0 = Release|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DF50094-6791-4C7C-B07D-C3E995B69C49}.Release|Any CPU.Build.0 = Release|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC}.Release|Any CPU.Build.0 = Release|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1}.Release|Any CPU.Build.0 = Release|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {902D822A-52B6-481C-96C5-ECD891FF83FC}.Release|Any CPU.Build.0 = Release|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4}.Release|Any CPU.Build.0 = Release|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76A5564E-033B-4AA6-A22B-78B6EB134CC6}.Release|Any CPU.Build.0 = Release|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA}.Release|Any CPU.Build.0 = Release|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED}.Release|Any CPU.Build.0 = Release|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4B4800F-6238-4EA9-A9BB-298D668C26C4}.Release|Any CPU.Build.0 = Release|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9AC4123-7987-47D3-85D6-CD13928F3683}.Release|Any CPU.Build.0 = Release|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22BDDF5C-F911-4978-B83F-981F3652BF45}.Release|Any CPU.Build.0 = Release|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0}.Release|Any CPU.Build.0 = Release|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7}.Release|Any CPU.Build.0 = Release|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63}.Release|Any CPU.Build.0 = Release|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4}.Release|Any CPU.Build.0 = Release|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {995DB1CE-A2FC-4468-A521-4207FD587EC5}.Release|Any CPU.Build.0 = Release|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278}.Release|Any CPU.Build.0 = Release|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {920867B4-4740-4074-9B49-14002B272A63}.Release|Any CPU.Build.0 = Release|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D422738-B111-4DEE-82E1-C3A90F1133B1}.Release|Any CPU.Build.0 = Release|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08CC528E-98D7-41D9-957D-9F9064645788}.Release|Any CPU.Build.0 = Release|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B507D18B-770E-4581-854B-15579AC7074F}.Release|Any CPU.Build.0 = Release|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE}.Release|Any CPU.Build.0 = Release|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C4C266C-DC2A-4A48-AB87-185E284B86E9}.Release|Any CPU.Build.0 = Release|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0380623A-EC74-430B-AA59-A6D23BC5E108}.Release|Any CPU.Build.0 = Release|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD}.Release|Any CPU.Build.0 = Release|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1}.Release|Any CPU.Build.0 = Release|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C}.Release|Any CPU.Build.0 = Release|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {102C3711-135E-446D-9A35-AEFB79993CAA}.Release|Any CPU.Build.0 = Release|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B7C1441-8801-4121-ABFB-03771E9DFE46}.Release|Any CPU.Build.0 = Release|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {942816E3-B270-40DC-9532-C1077FF59A32}.Release|Any CPU.Build.0 = Release|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBB50072-33BE-4B4A-8908-E98BC0C80B92}.Release|Any CPU.Build.0 = Release|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D509011F-4690-4F21-BA30-E4C31799993F}.Release|Any CPU.Build.0 = Release|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Debug|Any CPU.Build.0 = Debug|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Release|Any CPU.ActiveCfg = Release|Any CPU - {257C64BC-BD16-4F6D-A0B9-E286A4161241}.Release|Any CPU.Build.0 = Release|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {785251E2-6E77-40E3-90C2-4DFB63D0721B}.Release|Any CPU.Build.0 = Release|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0521239A-6B83-414F-B3E2-0515FC70F121}.Release|Any CPU.Build.0 = Release|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44E33132-9427-4E52-B105-67A8BC2BC29E}.Release|Any CPU.Build.0 = Release|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3008465-B344-4243-B14A-A1430E2BEC48}.Release|Any CPU.Build.0 = Release|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E}.Release|Any CPU.Build.0 = Release|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15EC4A03-D172-4984-B9CA-2C73929838DE}.Release|Any CPU.Build.0 = Release|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74C13BCC-A5A5-40FA-81E8-83DCCF760148}.Release|Any CPU.Build.0 = Release|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {427382F6-3153-47A2-BBC4-88F6EA116A8F}.Release|Any CPU.Build.0 = Release|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A}.Release|Any CPU.Build.0 = Release|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD}.Release|Any CPU.Build.0 = Release|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42FD76A3-803A-4E07-8A90-4269204B7B87}.Release|Any CPU.Build.0 = Release|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719}.Release|Any CPU.Build.0 = Release|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDD4CC0F-5493-40C2-B889-3670263888D8}.Release|Any CPU.Build.0 = Release|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F74AAE01-7B87-44CA-85ED-9A6307D51504}.Release|Any CPU.Build.0 = Release|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F}.Release|Any CPU.Build.0 = Release|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1}.Release|Any CPU.Build.0 = Release|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6}.Release|Any CPU.Build.0 = Release|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Debug|Any CPU.Build.0 = Debug|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Release|Any CPU.ActiveCfg = Release|Any CPU - {35D17AF3-FDCD-4704-969C-E82DBCC0A232}.Release|Any CPU.Build.0 = Release|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {984F481B-79FF-4825-917B-944F151694BC}.Release|Any CPU.Build.0 = Release|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B12BECC4-8A58-4DBD-A5CD-144A507972BB}.Release|Any CPU.Build.0 = Release|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012}.Release|Any CPU.Build.0 = Release|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972}.Release|Any CPU.Build.0 = Release|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {405694F8-0051-4DAE-A991-919FAC36C7DA}.Release|Any CPU.Build.0 = Release|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2EAA690B-1395-4952-95A0-A52F929028C4}.Release|Any CPU.Build.0 = Release|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Debug|Any CPU.Build.0 = Debug|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Release|Any CPU.ActiveCfg = Release|Any CPU - {722FE012-8F23-4558-9E8F-A37C02902058}.Release|Any CPU.Build.0 = Release|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79D3C6D6-6433-471D-B354-477E07CB08EE}.Release|Any CPU.Build.0 = Release|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5}.Release|Any CPU.Build.0 = Release|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA}.Release|Any CPU.Build.0 = Release|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97062425-3379-4F8D-BFA2-D445C56C0801}.Release|Any CPU.Build.0 = Release|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6}.Release|Any CPU.Build.0 = Release|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03EC70B8-912C-4FBE-94DD-6327F4F23021}.Release|Any CPU.Build.0 = Release|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F}.Release|Any CPU.Build.0 = Release|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E293BB96-5054-497B-BCE5-64AF9B0457B1}.Release|Any CPU.Build.0 = Release|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB7AF3F8-44CD-4732-8A25-A43902437B89}.Release|Any CPU.Build.0 = Release|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6472B3C1-C237-49CD-82C8-821AD001096A}.Release|Any CPU.Build.0 = Release|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F}.Release|Any CPU.Build.0 = Release|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98}.Release|Any CPU.Build.0 = Release|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47D57848-A910-4869-8A46-84E40A985FEE}.Release|Any CPU.Build.0 = Release|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A1F9647-B773-40AB-9126-30868014AE58}.Release|Any CPU.Build.0 = Release|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0}.Release|Any CPU.Build.0 = Release|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10CF8240-4276-4199-B3D1-C45F16468EBD}.Release|Any CPU.Build.0 = Release|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {39DFEFCD-7C73-450F-9A2F-7426188A890B}.Release|Any CPU.Build.0 = Release|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083}.Release|Any CPU.Build.0 = Release|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7779D9BD-5928-49A2-965F-537967004238}.Release|Any CPU.Build.0 = Release|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC41F335-E240-47E0-B409-AFAD1400E626}.Release|Any CPU.Build.0 = Release|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C}.Release|Any CPU.Build.0 = Release|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2}.Release|Any CPU.Build.0 = Release|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B}.Release|Any CPU.Build.0 = Release|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A}.Release|Any CPU.Build.0 = Release|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4C8056F-7325-4DB1-9F09-A6F37B052192}.Release|Any CPU.Build.0 = Release|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901}.Release|Any CPU.Build.0 = Release|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C}.Release|Any CPU.Build.0 = Release|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35}.Release|Any CPU.Build.0 = Release|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D}.Release|Any CPU.Build.0 = Release|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA}.Release|Any CPU.Build.0 = Release|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89}.Release|Any CPU.Build.0 = Release|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34987F45-8234-428C-AB41-783D42295C32}.Release|Any CPU.Build.0 = Release|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Debug|Any CPU.Build.0 = Debug|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Release|Any CPU.ActiveCfg = Release|Any CPU - {227DA969-291B-4749-985C-7A83523B7F53}.Release|Any CPU.Build.0 = Release|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C}.Release|Any CPU.Build.0 = Release|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9}.Release|Any CPU.Build.0 = Release|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A025B8D2-5D92-4023-82AB-97A672A5A132}.Release|Any CPU.Build.0 = Release|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC}.Release|Any CPU.Build.0 = Release|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E09E476C-9DF8-46AC-848E-4E7635369117}.Release|Any CPU.Build.0 = Release|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C}.Release|Any CPU.Build.0 = Release|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8142FB8C-3D32-4062-BD95-B2F61A1A390A}.Release|Any CPU.Build.0 = Release|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4155336A-DC06-4885-878D-03AF5DFAF47D}.Release|Any CPU.Build.0 = Release|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA}.Release|Any CPU.Build.0 = Release|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B112FAC-CB57-48B6-A3D5-95456477CB8D}.Release|Any CPU.Build.0 = Release|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B84E4D98-0B10-4189-8572-F6F7B4E384B7}.Release|Any CPU.Build.0 = Release|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E81EC3E4-521F-4C52-8AA0-A783847E764E}.Release|Any CPU.Build.0 = Release|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49EB2864-B715-47DD-AE47-C5243C656F47}.Release|Any CPU.Build.0 = Release|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Debug|Any CPU.Build.0 = Debug|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Release|Any CPU.ActiveCfg = Release|Any CPU - {68538541-4280-46F5-BA08-99ACA8575615}.Release|Any CPU.Build.0 = Release|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6F93723-5BC3-4D25-A83E-25B41B6D956F}.Release|Any CPU.Build.0 = Release|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {109BF321-1BC6-4031-A59B-7B5375EBA8C5}.Release|Any CPU.Build.0 = Release|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08A78A69-913B-4C5E-BCE0-739585F82D1E}.Release|Any CPU.Build.0 = Release|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6857FC4-97C2-4E20-B005-1FAABC574B88}.Release|Any CPU.Build.0 = Release|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6D4AADE-3ABA-45E6-9916-2F8798412549}.Release|Any CPU.Build.0 = Release|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86E85013-7C71-4770-9323-18897A64F5B2}.Release|Any CPU.Build.0 = Release|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {014A9583-0EAA-48A4-ACBE-07DC88159E13}.Release|Any CPU.Build.0 = Release|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9}.Release|Any CPU.Build.0 = Release|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C71CA88-0D04-4DDB-8906-B953908B8B8B}.Release|Any CPU.Build.0 = Release|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE}.Release|Any CPU.Build.0 = Release|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A}.Release|Any CPU.Build.0 = Release|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE}.Release|Any CPU.Build.0 = Release|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72D54834-7ADF-4B18-A745-FCBBC255073B}.Release|Any CPU.Build.0 = Release|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3}.Release|Any CPU.Build.0 = Release|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918}.Release|Any CPU.Build.0 = Release|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596}.Release|Any CPU.Build.0 = Release|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C}.Release|Any CPU.Build.0 = Release|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40D7A0A3-68BD-431E-A67A-E2A35508D55D}.Release|Any CPU.Build.0 = Release|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A}.Release|Any CPU.Build.0 = Release|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Debug|Any CPU.Build.0 = Debug|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Release|Any CPU.ActiveCfg = Release|Any CPU - {47550AB9-FA06-42D6-A4B8-7DD12FE66563}.Release|Any CPU.Build.0 = Release|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E}.Release|Any CPU.Build.0 = Release|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404}.Release|Any CPU.Build.0 = Release|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED3DF100-C5DB-4334-A847-118922B28D95}.Release|Any CPU.Build.0 = Release|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15482834-9242-4D20-9736-9DA571A9A83A}.Release|Any CPU.Build.0 = Release|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8A255A72-50FC-460E-9897-FA53F455580B}.Release|Any CPU.Build.0 = Release|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CED33625-A034-475B-A4C0-A4E7D1BADD10}.Release|Any CPU.Build.0 = Release|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016}.Release|Any CPU.Build.0 = Release|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF85DB7F-70C2-4804-AA57-FACE204981DA}.Release|Any CPU.Build.0 = Release|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B}.Release|Any CPU.Build.0 = Release|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8826831D-8733-473A-B47B-A30C3732B13D}.Release|Any CPU.Build.0 = Release|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72}.Release|Any CPU.Build.0 = Release|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {54BBA043-317B-4A4F-B583-513D08BC25A7}.Release|Any CPU.Build.0 = Release|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4}.Release|Any CPU.Build.0 = Release|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E469F047-6AD0-4D2B-9900-46358DA3BC30}.Release|Any CPU.Build.0 = Release|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB9F1905-1798-4766-8347-A8D2A9DBFAED}.Release|Any CPU.Build.0 = Release|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCE5C620-E17A-4EB1-A17A-9F90311B197D}.Release|Any CPU.Build.0 = Release|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A}.Release|Any CPU.Build.0 = Release|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05}.Release|Any CPU.Build.0 = Release|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Debug|Any CPU.Build.0 = Debug|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.ActiveCfg = Release|Any CPU - {267933BD-BFB8-4906-BA39-DF193B2FD558}.Release|Any CPU.Build.0 = Release|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48}.Release|Any CPU.Build.0 = Release|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {01B86C39-B0C8-48A4-949C-1C63D755B02C}.Release|Any CPU.Build.0 = Release|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD6609C7-07AC-49FD-B588-44E649D0AE6E}.Release|Any CPU.Build.0 = Release|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Debug|Any CPU.Build.0 = Debug|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Release|Any CPU.ActiveCfg = Release|Any CPU - {856B4ACA-BD13-417F-A6E2-0F401F877189}.Release|Any CPU.Build.0 = Release|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B52B199C-0E1C-4CE9-B066-71D26F618424}.Release|Any CPU.Build.0 = Release|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721}.Release|Any CPU.Build.0 = Release|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD365101-E8FC-6516-2883-B9CA024B36FA}.Release|Any CPU.Build.0 = Release|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE}.Release|Any CPU.Build.0 = Release|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1C6C6B6-5B99-5AA6-7F76-27560C111605}.Release|Any CPU.Build.0 = Release|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {459DA653-F12A-65B5-41EF-A5877B1C38BA}.Release|Any CPU.Build.0 = Release|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DD70A99-41A6-8598-553E-2B5AB6277035}.Release|Any CPU.Build.0 = Release|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Debug|Any CPU.Build.0 = Debug|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Release|Any CPU.ActiveCfg = Release|Any CPU - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88}.Release|Any CPU.Build.0 = Release|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147}.Release|Any CPU.Build.0 = Release|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B}.Release|Any CPU.Build.0 = Release|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C}.Release|Any CPU.Build.0 = Release|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A}.Release|Any CPU.Build.0 = Release|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F810C8A8-1256-440F-BAAF-7F3588291963}.Release|Any CPU.Build.0 = Release|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59}.Release|Any CPU.Build.0 = Release|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C95DE287-9D21-4DCD-9281-A060B6D99774}.Release|Any CPU.Build.0 = Release|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96748DAE-D367-48C0-B64E-2F25010EAC4D}.Release|Any CPU.Build.0 = Release|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A0063BF-EE72-E688-84C6-9E3CE0616C94}.Release|Any CPU.Build.0 = Release|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70}.Release|Any CPU.Build.0 = Release|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7B63E08-8F62-34F6-FEA5-063267F1FC85}.Release|Any CPU.Build.0 = Release|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C48C1CA-7E53-4261-A477-454DD3A8402C}.Release|Any CPU.Build.0 = Release|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A54344EB-05A7-A405-5368-4A9C0A60B078}.Release|Any CPU.Build.0 = Release|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6}.Release|Any CPU.Build.0 = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.Build.0 = Release|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3DF1C3E-7319-48B1-81AB-0284853BB567}.Release|Any CPU.Build.0 = Release|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D7561CB-5059-4F5F-B736-B97195B46A91}.Release|Any CPU.Build.0 = Release|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA}.Release|Any CPU.Build.0 = Release|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {418EE258-2670-29D3-480F-EC0FD07700E8}.Release|Any CPU.Build.0 = Release|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D}.Release|Any CPU.Build.0 = Release|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D63FEED3-2342-7E96-4121-B0C19CF1EA81}.Release|Any CPU.Build.0 = Release|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DED16774-635C-D781-4D5B-D1FA56EECF10}.Release|Any CPU.Build.0 = Release|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08}.Release|Any CPU.Build.0 = Release|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD11D070-F39E-1C41-1843-AE3ADBE501EF}.Release|Any CPU.Build.0 = Release|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {001D0817-1EED-4C04-821E-F815F148EC90}.Release|Any CPU.Build.0 = Release|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {546E4417-5409-40F4-A125-E08329DD82BB}.Release|Any CPU.Build.0 = Release|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {738A72FB-ED83-4127-AA3B-59BF90635F8F}.Release|Any CPU.Build.0 = Release|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9950639D-AA4C-4FF1-A65E-9790EB561C8A}.Release|Any CPU.Build.0 = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.Build.0 = Release|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7}.Release|Any CPU.Build.0 = Release|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Debug|Any CPU.Build.0 = Debug|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Release|Any CPU.ActiveCfg = Release|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Release|Any CPU.Build.0 = Release|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Release|Any CPU.Build.0 = Release|Any CPU - {C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9}.Release|Any CPU.Build.0 = Release|Any CPU - {9FF83836-8627-2943-3344-60319FB85B39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FF83836-8627-2943-3344-60319FB85B39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FF83836-8627-2943-3344-60319FB85B39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FF83836-8627-2943-3344-60319FB85B39}.Release|Any CPU.Build.0 = Release|Any CPU - {2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D}.Release|Any CPU.Build.0 = Release|Any CPU - {1B5368E2-8A31-F686-3120-770BAD793962}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B5368E2-8A31-F686-3120-770BAD793962}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B5368E2-8A31-F686-3120-770BAD793962}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B5368E2-8A31-F686-3120-770BAD793962}.Release|Any CPU.Build.0 = Release|Any CPU - {BFFC0787-81F4-4751-9385-B91BB8CB183A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BFFC0787-81F4-4751-9385-B91BB8CB183A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BFFC0787-81F4-4751-9385-B91BB8CB183A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BFFC0787-81F4-4751-9385-B91BB8CB183A}.Release|Any CPU.Build.0 = Release|Any CPU - {E0EEFE73-EF05-491B-A265-E2B613D0C82F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E0EEFE73-EF05-491B-A265-E2B613D0C82F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E0EEFE73-EF05-491B-A265-E2B613D0C82F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E0EEFE73-EF05-491B-A265-E2B613D0C82F}.Release|Any CPU.Build.0 = Release|Any CPU - {2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8}.Release|Any CPU.Build.0 = Release|Any CPU - {B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC}.Release|Any CPU.Build.0 = Release|Any CPU - {569667D0-2038-4566-9711-6B174C631063}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {569667D0-2038-4566-9711-6B174C631063}.Debug|Any CPU.Build.0 = Debug|Any CPU - {569667D0-2038-4566-9711-6B174C631063}.Release|Any CPU.ActiveCfg = Release|Any CPU - {569667D0-2038-4566-9711-6B174C631063}.Release|Any CPU.Build.0 = Release|Any CPU - {7760B229-E3EA-4A60-9E32-7B2F7FB199E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7760B229-E3EA-4A60-9E32-7B2F7FB199E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7760B229-E3EA-4A60-9E32-7B2F7FB199E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7760B229-E3EA-4A60-9E32-7B2F7FB199E7}.Release|Any CPU.Build.0 = Release|Any CPU - {3672F185-59B2-490D-A00B-5CA9815909B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3672F185-59B2-490D-A00B-5CA9815909B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3672F185-59B2-490D-A00B-5CA9815909B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3672F185-59B2-490D-A00B-5CA9815909B6}.Release|Any CPU.Build.0 = Release|Any CPU - {1B9DC76D-942D-4DCC-979F-E9E56BB7073E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B9DC76D-942D-4DCC-979F-E9E56BB7073E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B9DC76D-942D-4DCC-979F-E9E56BB7073E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B9DC76D-942D-4DCC-979F-E9E56BB7073E}.Release|Any CPU.Build.0 = Release|Any CPU - {7F65C827-914D-42B1-AE26-44053AE3140F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F65C827-914D-42B1-AE26-44053AE3140F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F65C827-914D-42B1-AE26-44053AE3140F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F65C827-914D-42B1-AE26-44053AE3140F}.Release|Any CPU.Build.0 = Release|Any CPU - {1425C1AB-048F-4ABF-ACAB-793E2524F0A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1425C1AB-048F-4ABF-ACAB-793E2524F0A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1425C1AB-048F-4ABF-ACAB-793E2524F0A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1425C1AB-048F-4ABF-ACAB-793E2524F0A8}.Release|Any CPU.Build.0 = Release|Any CPU - {4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14}.Release|Any CPU.Build.0 = Release|Any CPU - {09B8B63F-972B-4055-9BAD-B2883EBA3EF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09B8B63F-972B-4055-9BAD-B2883EBA3EF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09B8B63F-972B-4055-9BAD-B2883EBA3EF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09B8B63F-972B-4055-9BAD-B2883EBA3EF0}.Release|Any CPU.Build.0 = Release|Any CPU - {4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99}.Release|Any CPU.Build.0 = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.Build.0 = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.Build.0 = Release|Any CPU - {62FB9F56-221E-47D5-8B30-311A13D6A568}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62FB9F56-221E-47D5-8B30-311A13D6A568}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62FB9F56-221E-47D5-8B30-311A13D6A568}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62FB9F56-221E-47D5-8B30-311A13D6A568}.Release|Any CPU.Build.0 = Release|Any CPU - {ACEEA6F9-868B-4701-AF65-89292F656A1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ACEEA6F9-868B-4701-AF65-89292F656A1D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ACEEA6F9-868B-4701-AF65-89292F656A1D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ACEEA6F9-868B-4701-AF65-89292F656A1D}.Release|Any CPU.Build.0 = Release|Any CPU - {FB12303C-7A3A-4A42-900F-C131D0FD7BA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB12303C-7A3A-4A42-900F-C131D0FD7BA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB12303C-7A3A-4A42-900F-C131D0FD7BA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB12303C-7A3A-4A42-900F-C131D0FD7BA2}.Release|Any CPU.Build.0 = Release|Any CPU - {BAE82F6F-2528-45DF-9571-F733C31CEB1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAE82F6F-2528-45DF-9571-F733C31CEB1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAE82F6F-2528-45DF-9571-F733C31CEB1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAE82F6F-2528-45DF-9571-F733C31CEB1E}.Release|Any CPU.Build.0 = Release|Any CPU - {97C66786-03F8-4886-088E-FA1BECB1C574}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97C66786-03F8-4886-088E-FA1BECB1C574}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97C66786-03F8-4886-088E-FA1BECB1C574}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97C66786-03F8-4886-088E-FA1BECB1C574}.Release|Any CPU.Build.0 = Release|Any CPU - {7B927926-0AF4-A6F2-8ABA-331A6C138EAC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B927926-0AF4-A6F2-8ABA-331A6C138EAC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B927926-0AF4-A6F2-8ABA-331A6C138EAC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B927926-0AF4-A6F2-8ABA-331A6C138EAC}.Release|Any CPU.Build.0 = Release|Any CPU - {C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA}.Release|Any CPU.Build.0 = Release|Any CPU - {6FCE34BF-077B-9425-CD34-FA9B2CD190FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FCE34BF-077B-9425-CD34-FA9B2CD190FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FCE34BF-077B-9425-CD34-FA9B2CD190FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FCE34BF-077B-9425-CD34-FA9B2CD190FA}.Release|Any CPU.Build.0 = Release|Any CPU - {A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889}.Release|Any CPU.Build.0 = Release|Any CPU - {107C0D30-35C1-142B-209A-29BD6BAE7DE9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {107C0D30-35C1-142B-209A-29BD6BAE7DE9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {107C0D30-35C1-142B-209A-29BD6BAE7DE9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {107C0D30-35C1-142B-209A-29BD6BAE7DE9}.Release|Any CPU.Build.0 = Release|Any CPU - {DB03F47B-4E3A-4484-86DC-741472AD49A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB03F47B-4E3A-4484-86DC-741472AD49A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB03F47B-4E3A-4484-86DC-741472AD49A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB03F47B-4E3A-4484-86DC-741472AD49A3}.Release|Any CPU.Build.0 = Release|Any CPU - {2DB2EADB-745A-4442-A48A-B1B721412F78}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DB2EADB-745A-4442-A48A-B1B721412F78}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DB2EADB-745A-4442-A48A-B1B721412F78}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DB2EADB-745A-4442-A48A-B1B721412F78}.Release|Any CPU.Build.0 = Release|Any CPU - {4524F120-F72B-4373-B731-6A2D0EF633A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4524F120-F72B-4373-B731-6A2D0EF633A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4524F120-F72B-4373-B731-6A2D0EF633A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4524F120-F72B-4373-B731-6A2D0EF633A7}.Release|Any CPU.Build.0 = Release|Any CPU - {0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD}.Release|Any CPU.Build.0 = Release|Any CPU - {8880DC40-7C67-AEBC-AFD6-45094E65D01B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8880DC40-7C67-AEBC-AFD6-45094E65D01B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8880DC40-7C67-AEBC-AFD6-45094E65D01B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8880DC40-7C67-AEBC-AFD6-45094E65D01B}.Release|Any CPU.Build.0 = Release|Any CPU - {DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0}.Release|Any CPU.Build.0 = Release|Any CPU - {A076DAB1-03F6-0592-4900-5CEF38A76026}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A076DAB1-03F6-0592-4900-5CEF38A76026}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A076DAB1-03F6-0592-4900-5CEF38A76026}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A076DAB1-03F6-0592-4900-5CEF38A76026}.Release|Any CPU.Build.0 = Release|Any CPU - {9CA173D6-B883-9629-EFB3-A37D89AAEE81}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CA173D6-B883-9629-EFB3-A37D89AAEE81}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CA173D6-B883-9629-EFB3-A37D89AAEE81}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CA173D6-B883-9629-EFB3-A37D89AAEE81}.Release|Any CPU.Build.0 = Release|Any CPU - {FDE1FE78-B568-3602-653D-2E641AD999D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDE1FE78-B568-3602-653D-2E641AD999D5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDE1FE78-B568-3602-653D-2E641AD999D5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDE1FE78-B568-3602-653D-2E641AD999D5}.Release|Any CPU.Build.0 = Release|Any CPU - {2F99A8DC-3A89-3004-66F2-B61158DA9F61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F99A8DC-3A89-3004-66F2-B61158DA9F61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F99A8DC-3A89-3004-66F2-B61158DA9F61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F99A8DC-3A89-3004-66F2-B61158DA9F61}.Release|Any CPU.Build.0 = Release|Any CPU - {4AC7962E-AB5E-BEE5-DC17-22A29FE73DED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4AC7962E-AB5E-BEE5-DC17-22A29FE73DED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4AC7962E-AB5E-BEE5-DC17-22A29FE73DED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4AC7962E-AB5E-BEE5-DC17-22A29FE73DED}.Release|Any CPU.Build.0 = Release|Any CPU - {E5343E6A-61DC-46E0-6A7A-9F93362AF113}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5343E6A-61DC-46E0-6A7A-9F93362AF113}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5343E6A-61DC-46E0-6A7A-9F93362AF113}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5343E6A-61DC-46E0-6A7A-9F93362AF113}.Release|Any CPU.Build.0 = Release|Any CPU - {A768070E-FF34-424C-9945-B75533E7ADD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A768070E-FF34-424C-9945-B75533E7ADD3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A768070E-FF34-424C-9945-B75533E7ADD3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A768070E-FF34-424C-9945-B75533E7ADD3}.Release|Any CPU.Build.0 = Release|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Release|Any CPU.Build.0 = Release|Any CPU - {AB981FD3-3523-CDEA-73C9-D6280400062C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB981FD3-3523-CDEA-73C9-D6280400062C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB981FD3-3523-CDEA-73C9-D6280400062C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB981FD3-3523-CDEA-73C9-D6280400062C}.Release|Any CPU.Build.0 = Release|Any CPU - {B760E50F-F5B6-1266-02A8-0056483F475B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B760E50F-F5B6-1266-02A8-0056483F475B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B760E50F-F5B6-1266-02A8-0056483F475B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B760E50F-F5B6-1266-02A8-0056483F475B}.Release|Any CPU.Build.0 = Release|Any CPU - {CDD00CAC-4A4E-FAD5-E8C3-B833C2994314}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDD00CAC-4A4E-FAD5-E8C3-B833C2994314}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDD00CAC-4A4E-FAD5-E8C3-B833C2994314}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDD00CAC-4A4E-FAD5-E8C3-B833C2994314}.Release|Any CPU.Build.0 = Release|Any CPU - {56778F12-42F0-4288-B559-218FC5A3C323}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56778F12-42F0-4288-B559-218FC5A3C323}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56778F12-42F0-4288-B559-218FC5A3C323}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56778F12-42F0-4288-B559-218FC5A3C323}.Release|Any CPU.Build.0 = Release|Any CPU - {6120F990-8729-DD52-5CEA-F2295528ED07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6120F990-8729-DD52-5CEA-F2295528ED07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6120F990-8729-DD52-5CEA-F2295528ED07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6120F990-8729-DD52-5CEA-F2295528ED07}.Release|Any CPU.Build.0 = Release|Any CPU - {32C35E78-BE23-2D27-F1B3-C2270E45B0C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32C35E78-BE23-2D27-F1B3-C2270E45B0C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32C35E78-BE23-2D27-F1B3-C2270E45B0C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32C35E78-BE23-2D27-F1B3-C2270E45B0C4}.Release|Any CPU.Build.0 = Release|Any CPU - {9AC112AD-18C2-359E-6696-87B814A69E63}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9AC112AD-18C2-359E-6696-87B814A69E63}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9AC112AD-18C2-359E-6696-87B814A69E63}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9AC112AD-18C2-359E-6696-87B814A69E63}.Release|Any CPU.Build.0 = Release|Any CPU - {B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80}.Release|Any CPU.Build.0 = Release|Any CPU - {D74CF5EA-4BE7-4F23-663A-490C29D7576A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D74CF5EA-4BE7-4F23-663A-490C29D7576A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D74CF5EA-4BE7-4F23-663A-490C29D7576A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D74CF5EA-4BE7-4F23-663A-490C29D7576A}.Release|Any CPU.Build.0 = Release|Any CPU - {73A8BAF3-10A7-1C52-7CFF-6301B730A458}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73A8BAF3-10A7-1C52-7CFF-6301B730A458}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73A8BAF3-10A7-1C52-7CFF-6301B730A458}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73A8BAF3-10A7-1C52-7CFF-6301B730A458}.Release|Any CPU.Build.0 = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.Build.0 = Release|Any CPU - {52186445-5B56-EA32-F154-39F47D2FB235}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52186445-5B56-EA32-F154-39F47D2FB235}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52186445-5B56-EA32-F154-39F47D2FB235}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52186445-5B56-EA32-F154-39F47D2FB235}.Release|Any CPU.Build.0 = Release|Any CPU - {410E0FFF-705D-4471-9E52-FF495096A945}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {410E0FFF-705D-4471-9E52-FF495096A945}.Debug|Any CPU.Build.0 = Debug|Any CPU - {410E0FFF-705D-4471-9E52-FF495096A945}.Release|Any CPU.ActiveCfg = Release|Any CPU - {410E0FFF-705D-4471-9E52-FF495096A945}.Release|Any CPU.Build.0 = Release|Any CPU - {ABCAB030-29ED-8219-F1DB-39D16098805F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ABCAB030-29ED-8219-F1DB-39D16098805F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ABCAB030-29ED-8219-F1DB-39D16098805F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ABCAB030-29ED-8219-F1DB-39D16098805F}.Release|Any CPU.Build.0 = Release|Any CPU - {C4F5372D-3127-A2CA-3B22-B343D5E54EB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4F5372D-3127-A2CA-3B22-B343D5E54EB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4F5372D-3127-A2CA-3B22-B343D5E54EB5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4F5372D-3127-A2CA-3B22-B343D5E54EB5}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} = {D52D5A11-78EF-4154-8298-267738A6715B} - {77BDEF2B-1A30-4E64-BC35-0DFC21091327} = {A057F430-AD93-49D9-8080-6E074AF05694} - {573B7B0E-3065-42DE-A391-EE026CE7A366} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} - {FFD1E99C-49DA-4ADC-BC92-B14B51B45CAF} = {BA00B3F2-199B-40E2-B0EA-0AA4F51A1C52} - {0439B173-F41E-4CE0-A44A-CCB70328F272} = {D52D5A11-78EF-4154-8298-267738A6715B} - {3EE2D2F8-2B57-4EF7-88E8-5E4C851E66C2} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {A584D040-95AC-4422-93FF-7B80532213F0} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {76249548-4344-4CD0-A0AC-12AC54184B58} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {A5543E56-DA53-494D-A531-DA75091D46FF} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {8AC72641-30D3-4ACF-89FA-808FADC55C2E} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {AEC1E6D3-DC23-41BD-B456-3AAD26E34978} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {E6B11DE5-B5EC-4C25-BAF6-1AC9FD0409EB} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {9E72FEB9-A626-4312-892B-CDD043879758} = {D52D5A11-78EF-4154-8298-267738A6715B} - {8B09385A-719C-4B83-B61E-0ECD5D2734BD} = {9E72FEB9-A626-4312-892B-CDD043879758} - {8E569C1C-2637-4D89-804C-50FBC83948FB} = {9E72FEB9-A626-4312-892B-CDD043879758} - {5A10C02B-D12C-479C-9E7F-9A7D9DDD753D} = {9E72FEB9-A626-4312-892B-CDD043879758} - {FF1839EA-FB6B-4ED5-9804-E40427046D35} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {9FE2A95F-D7A3-4305-9E12-E955EF74CF8D} = {6255DBAD-A388-4418-A5EB-C79630786028} - {6E4A0D87-C3CE-430F-A475-A6B68C116D96} = {6255DBAD-A388-4418-A5EB-C79630786028} - {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} = {D52D5A11-78EF-4154-8298-267738A6715B} - {A5851F0F-CB0D-4E29-A829-D1BDEADB807B} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {FDEECE0D-6F66-4053-948E-9AC021B97C8D} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {4DFA9E60-E9CE-4FD3-A57F-F76EF3FF4873} = {ECC8B9A9-9E92-4493-984D-2E350A49189D} - {371B293B-0CA9-4385-8EBB-5224332066D2} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {9E12ADBF-713B-4FE7-B71F-52B5078A57CE} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {47CC8F7A-681D-42B9-AE04-78453782C1B6} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {F595CB9F-B117-4D62-A1AE-48599927DB36} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {5CF403B2-47C9-4E4E-8856-0294BDD64884} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {059473BA-FAF9-405F-9985-33DDCA2E9F0D} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {B39B5FB6-E7B9-4A13-8FFA-FC7FEED4371B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C8A00439-5B8D-4923-8FAA-AB75E2A786ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {31B03DCB-ED12-4412-867A-61E347D40D8C} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {AB984240-EF03-416F-A9B2-F5CF169E04B7} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {EBBBBD00-74B5-49CB-8C24-4FD7C2ECC415} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {65DDA934-B76B-4018-A565-CF6CEF0D6BB0} = {11CDB632-9A54-439F-8B68-32B3C775BC3A} - {376D8343-DF83-41D2-BF6E-2F5DC8DBF259} = {11CDB632-9A54-439F-8B68-32B3C775BC3A} - {6259BCB9-A302-4CE7-AF48-9283A0DFD3CB} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {1DA91161-8757-4A68-A0A1-8C94C36C9240} = {6255DBAD-A388-4418-A5EB-C79630786028} - {F4923692-D343-4318-AECA-96F580B1A563} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F135B9E8-3FFE-44E9-835B-7B6A928F4823} = {F4923692-D343-4318-AECA-96F580B1A563} - {75A6D078-C19D-4030-88CC-C2A8608FF604} = {F4923692-D343-4318-AECA-96F580B1A563} - {2D895594-3FF5-4507-853A-CB65F2DB72ED} = {F4923692-D343-4318-AECA-96F580B1A563} - {AFA3EEF5-525F-4FF7-A0D0-E8E5D2734F93} = {F4923692-D343-4318-AECA-96F580B1A563} - {0655A0FB-59E8-4A9F-BAF5-47A89377F747} = {F4923692-D343-4318-AECA-96F580B1A563} - {5FBBBA6A-D6EC-42E1-8164-15C411EC77BE} = {F4923692-D343-4318-AECA-96F580B1A563} - {F3D9B137-32DE-4018-8058-78AB17FCDF9C} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {52B5D4F7-237B-4E0A-A167-68442164F70A} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F19C8B0F-A332-4190-9ABE-95790E0AE864} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {BB1B831F-4AC4-4DE5-A879-D5FC5B1CA9DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {72DCA4CF-8B95-47C9-B02A-2671953B7987} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {7DDEAEA9-E392-469C-ACB6-908C5BAD669E} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F3D50E3E-34D2-48C1-AB0D-ADCF92DC07D0} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {86A67B8C-EFA0-4103-B60F-312F07C15A7A} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {854E1A42-FEA4-420E-9E83-0A39EE03F1ED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {21FCEF89-9A3F-476E-833A-A9C2131B2AE6} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {14ECCFD6-2DC1-4124-BE26-15E8D28E3E90} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {F359AAA1-C854-444A-88F2-1C0D8A07F864} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {5D0ED1FC-3A7C-4531-9512-832E73AD9555} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {2BF7FB73-0C62-4ECF-99F0-0583855D2777} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {6FE7E243-2D99-4567-8786-6C9283D608EF} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {65DE28D5-DFEA-43E5-B820-BAF09A1FC4ED} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {D3E65610-4167-4235-9C9D-1E1FAD4C0CE6} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {F12F4645-C0FE-4129-8C71-65B4039DC445} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C457FA70-8732-44B8-A018-C96D14025D4B} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7071E78B-755B-410A-830B-AA05D7168944} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {87B65CBD-0FF4-4FB5-9ABC-161911A71179} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F40F88F1-CA90-4A79-B772-80E287E25982} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {AC3C8985-73C2-472A-8E76-A0B8786FEC3F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {07E19CA8-671D-4D58-9FED-5FEE9AE01A2F} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {CC362C67-6FC1-42B3-A130-8120AA8D790C} = {D52D5A11-78EF-4154-8298-267738A6715B} - {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {BAE74ABC-1096-495F-A624-BEBFBC1896F2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E92A1CAA-5758-41EF-B67E-C0D394E85417} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {F18DE651-A3E4-478F-A2B5-686429729EB8} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {42309C06-C0F2-490F-931B-CF41FA1970FF} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {EC19F867-E9EA-4B26-A1E7-87AAA3EB9296} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {DC15AE5F-D20E-47E4-92A4-DBBD1BD51E91} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {14CDBAD1-10C8-464A-B445-1F727C988010} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {FCFAF1AF-B3F6-45F3-85AB-8249EB8432CC} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {97B4A37E-B93E-48C9-95D5-689CB9495D8B} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {FE0F0889-C4AF-43C5-B851-B8CCC873BA2C} = {14CDBAD1-10C8-464A-B445-1F727C988010} - {B86EBB6F-A27F-4277-8265-937951A9DCB0} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {35B17218-9FB6-439E-AF73-9A1454BC923C} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {D5036D3F-1C53-47EE-BA50-AD290AE062D7} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {BD74BE00-54E4-4979-8797-E8027695F396} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {48DE251A-3482-4934-BC26-F99D2235AC9F} = {08BD73E6-72CE-4A8A-896D-2DFFF4D7D2F8} - {94B47385-E47F-4FD7-A3A9-A7AA122EFC93} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {C892CD81-50AE-49E5-BF44-A0C28A1614CC} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {EEF03CC6-1013-4AAF-BEED-BB4BA5021039} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {90E88EAC-4291-4406-8D88-EFDF61B11292} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {84868710-ECBB-4025-900A-EEB99EC49534} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {A061D2B4-B650-4F7F-A6CB-5C8FFFD512ED} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {D3BAA44E-8395-4E8A-AA96-6B463356C537} = {D52D5A11-78EF-4154-8298-267738A6715B} - {5BE18D72-0D02-4854-966E-745CE5DAF77F} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {73EAD4FE-B44F-44A7-904E-FFA5096D91BD} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {06D34108-01BA-4C77-A704-4DD9E6F7E32C} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {A98C939C-9F48-414A-A2D3-853BE4447397} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {A94BE05F-7DAB-461C-93E7-914CBDF4FA93} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {FBE91498-D83B-4873-A67E-0FB9D1C366F0} = {D3BAA44E-8395-4E8A-AA96-6B463356C537} - {6084D52D-775B-4A39-8CD5-AA2F362B5A61} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {D60EFB8E-F168-4EF2-8D8F-ED42EB6FB8CF} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {34BB9810-2983-4E55-A96A-132D32310145} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {4D83BDA7-2059-41C7-85AE-FEFAD5CD9498} = {6084D52D-775B-4A39-8CD5-AA2F362B5A61} - {8EF31071-3521-409D-9740-BBFBFC04C50E} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {13219C1C-23E1-4EBA-93FB-86830C93A800} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {60D0BEF2-FEAF-4066-8377-6C873CB24858} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {340BE5AC-68EC-41A5-9D0D-266037C58F13} = {C6D62079-B3F5-4006-AA49-3BF12C4805BB} - {BC518F26-996E-4DF0-BB44-783EB1C275D2} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {63D1DC91-C7C7-491A-8423-B0B89F39443F} = {B981DD7D-7083-4C7A-9A5F-B8CFAE7B670B} - {1E0E82D2-F53A-4326-9E39-D7D677590543} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {D82DB535-67FB-4712-B3EC-9A7A1EA6F7E9} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {6C3D4C1C-4864-44A9-8649-9856ABF667FA} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {AD3CC5B5-366B-4E34-8E80-EC5BB68B573A} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {F71A0D28-397D-4094-B1C2-7925E1310676} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {CEAF0044-28D3-4585-B69D-D65FF6D4745E} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {91D9F43A-BFD9-47CA-A6AD-430D1663EFF3} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {7D02D803-F9A9-492C-9B5E-454E4B258466} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {FD04A084-BB8A-4733-B9C5-FACF40342A8A} = {7D02D803-F9A9-492C-9B5E-454E4B258466} - {67A76560-D39F-4D49-B858-B476E1DFE37B} = {F4923692-D343-4318-AECA-96F580B1A563} - {DC33925B-264D-421B-96CC-46F853CBCC70} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {1B8FCBD9-8807-44E4-B91F-F4AB738CB26F} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {93317D44-835C-4F5E-B85D-580D51D5FFF4} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {DAF80936-FBEC-45AB-92DF-34966B0148FD} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {995756A1-A379-4797-89F0-87D219B5AF00} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {EB73D2CC-B1BE-471A-B76E-35F288CD0E16} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {842E19B3-8110-40FE-AAFF-D288BC928E55} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {C1319EC1-A489-482B-A343-38B52D8AB0B0} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {3C7A8246-DE82-4330-8697-24EF1B1C515D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {4059F87E-9762-46C1-AEB1-B1128EA533AE} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {433AD1FB-2DE8-479F-B89E-A17217591538} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {65311EC9-7A86-4E73-A587-F06A99474EDD} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {CD9081C6-7CA0-4A93-9318-33E54F3ED275} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {D262405E-1C72-4F14-A799-40471BAD48DC} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {BB840DEE-1F5F-45AA-A82F-4E7B7DC4F156} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {19B860CA-2E1E-45CC-A5E2-ED3F2BCEAB5D} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {440C9BD9-85EA-4473-AB1C-7C3562DF4915} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {23C3B247-523A-4FBF-B785-2F035E0089BD} = {6FC0578B-CDF1-43AD-9F7E-4AA7E4720A02} - {C7CF4193-6397-4450-AF42-3BACD7CF292E} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {8FE2725C-6829-4778-93BA-A53260697AFB} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {A4B972EC-9F0B-4405-9965-766FABC9B07E} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {31E60E23-FD98-4D5E-A137-2B3F2968BA09} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {25378F9D-2A66-4568-AAC6-E9282ACA3DD3} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {3FCB1BCD-34BC-4F66-968F-38DB28371D0F} = {3B96F4D8-4993-419B-BCEB-AFE4ED39449F} - {A030CD8E-61F3-4C15-B28A-C301446DDBEC} = {A5543E56-DA53-494D-A531-DA75091D46FF} - {D01D859E-4B72-478A-BABD-90F0981652D5} = {D52D5A11-78EF-4154-8298-267738A6715B} - {049E09BF-2E11-4E3B-926D-9DD6051A2DA4} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {F1BE6113-3439-45BB-8B58-20ACA4056895} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {77C2E24A-D143-44E7-86F9-AB6C5D444F63} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {D8FB1E73-6F50-4CC9-9C0E-FB73205F8DB3} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {B1DDC8AF-B0BE-46D1-A2FE-2D5219F847B5} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {8DF50094-6791-4C7C-B07D-C3E995B69C49} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {96EF6CDD-CD29-4E7B-B86A-3EBEE6AC9FDC} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {13ACF670-F109-404E-B252-2FA34A4EA061} = {D52D5A11-78EF-4154-8298-267738A6715B} - {91AE01B1-CC82-40E2-8290-B8A84C6E90D1} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {9EC33D45-CCC7-41DF-829E-6B89A640FE35} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {902D822A-52B6-481C-96C5-ECD891FF83FC} = {9EC33D45-CCC7-41DF-829E-6B89A640FE35} - {46244C99-3A0D-4D88-9F24-2B7B586ADBA4} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {76A5564E-033B-4AA6-A22B-78B6EB134CC6} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {67DC7FA0-506A-4977-95F6-BC739B2BC4BA} = {F4923692-D343-4318-AECA-96F580B1A563} - {8DF55DAB-4C1D-46F7-9324-0050F47B3BED} = {F4923692-D343-4318-AECA-96F580B1A563} - {ABD89F39-62D9-439E-8662-BE4F36BFA04F} = {D52D5A11-78EF-4154-8298-267738A6715B} - {D4B4800F-6238-4EA9-A9BB-298D668C26C4} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {F9AC4123-7987-47D3-85D6-CD13928F3683} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {22BDDF5C-F911-4978-B83F-981F3652BF45} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {0C824BB4-81FC-4B28-B7B1-07B2B2BB70A0} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {4711320B-F98D-4CB0-BFEB-B9685B6CBCB7} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {130F8ED1-A64F-48DE-BF43-18EAD19CAF63} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {A53FE09E-6B1C-46C0-9422-C313D14AE9E4} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {995DB1CE-A2FC-4468-A521-4207FD587EC5} = {90E88EAC-4291-4406-8D88-EFDF61B11292} - {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} = {D52D5A11-78EF-4154-8298-267738A6715B} - {7D6AE2BB-7DBF-4FC8-A1F5-C004D139B278} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {920867B4-4740-4074-9B49-14002B272A63} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {3D422738-B111-4DEE-82E1-C3A90F1133B1} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {08CC528E-98D7-41D9-957D-9F9064645788} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {B507D18B-770E-4581-854B-15579AC7074F} = {63FCC71F-1CEF-44D3-B95B-23EE58DE8C95} - {178AF3DE-1C24-41A9-8CA0-64A7D85DDFFE} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7C4C266C-DC2A-4A48-AB87-185E284B86E9} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {0380623A-EC74-430B-AA59-A6D23BC5E108} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {C6BDAB62-0B82-4ED2-8455-2FEA1F1B1EAD} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {C9BB4BB2-97B8-4CDE-B961-2F0A4CB5D7B1} = {53DF60C5-AE45-4FCE-9C9B-EE15F0E33BD4} - {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {82CB7E17-ED5A-4D26-B116-BA7B4226E43C} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {102C3711-135E-446D-9A35-AEFB79993CAA} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {2B7C1441-8801-4121-ABFB-03771E9DFE46} = {A8F1C9FA-4F16-43F9-8CC6-CCD124154440} - {ECC8B9A9-9E92-4493-984D-2E350A49189D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {942816E3-B270-40DC-9532-C1077FF59A32} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {FBB50072-33BE-4B4A-8908-E98BC0C80B92} = {DC33925B-264D-421B-96CC-46F853CBCC70} - {83E698F6-F8CD-4604-AB80-01A203389501} = {D52D5A11-78EF-4154-8298-267738A6715B} - {D509011F-4690-4F21-BA30-E4C31799993F} = {83E698F6-F8CD-4604-AB80-01A203389501} - {257C64BC-BD16-4F6D-A0B9-E286A4161241} = {83E698F6-F8CD-4604-AB80-01A203389501} - {785251E2-6E77-40E3-90C2-4DFB63D0721B} = {83E698F6-F8CD-4604-AB80-01A203389501} - {0521239A-6B83-414F-B3E2-0515FC70F121} = {83E698F6-F8CD-4604-AB80-01A203389501} - {44E33132-9427-4E52-B105-67A8BC2BC29E} = {83E698F6-F8CD-4604-AB80-01A203389501} - {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {D3008465-B344-4243-B14A-A1430E2BEC48} = {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} - {3CBA6005-B412-4D2A-8F1E-01D53D5C657E} = {E567A760-D19A-4CAC-BD6B-BAA0CE0BBC1B} - {15EC4A03-D172-4984-B9CA-2C73929838DE} = {83E698F6-F8CD-4604-AB80-01A203389501} - {74C13BCC-A5A5-40FA-81E8-83DCCF760148} = {83E698F6-F8CD-4604-AB80-01A203389501} - {427382F6-3153-47A2-BBC4-88F6EA116A8F} = {83E698F6-F8CD-4604-AB80-01A203389501} - {2BFFE9C3-E022-4B57-9E4D-0A0408424B1A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {CA8D7141-9520-46AC-83FD-6E034AD6EBDD} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {42FD76A3-803A-4E07-8A90-4269204B7B87} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} = {D52D5A11-78EF-4154-8298-267738A6715B} - {4CF6F78C-22BE-46C4-BC9B-824E8FEEF719} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {CDD4CC0F-5493-40C2-B889-3670263888D8} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F74AAE01-7B87-44CA-85ED-9A6307D51504} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {E3F010C7-6C96-4EEA-B5FA-BF80515E195F} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {B153F98A-7DA9-4A12-A1D7-105BE9408FA1} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {EFC5C34F-81A1-4EFC-966F-50B646C54FA6} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F3E04039-7BEE-46F8-B33B-FE13E977DCCA} = {52E60F16-6304-4E37-A220-C94D8C5D27DC} - {35D17AF3-FDCD-4704-969C-E82DBCC0A232} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {984F481B-79FF-4825-917B-944F151694BC} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {B12BECC4-8A58-4DBD-A5CD-144A507972BB} = {CC362C67-6FC1-42B3-A130-8120AA8D790C} - {12896A3F-5F7E-4192-8A58-E1D2527109D1} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F7A8000A-D8DA-4A1F-B0B2-9A52183F2012} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {4E8DA436-8FAF-4028-8A0C-E4EEB3615972} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {405694F8-0051-4DAE-A991-919FAC36C7DA} = {12896A3F-5F7E-4192-8A58-E1D2527109D1} - {5F0BB690-0FBB-455A-AE9A-8BA914AA78F6} = {D52D5A11-78EF-4154-8298-267738A6715B} - {F7103498-8B5B-4698-AACE-9E949F732E77} = {5F0BB690-0FBB-455A-AE9A-8BA914AA78F6} - {2EAA690B-1395-4952-95A0-A52F929028C4} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {722FE012-8F23-4558-9E8F-A37C02902058} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {79D3C6D6-6433-471D-B354-477E07CB08EE} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {5A3B9F4D-E6CC-410F-B307-0E69CCA213F5} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {4CDCD854-6E06-4076-AE94-53C1C1D7F6FA} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {97062425-3379-4F8D-BFA2-D445C56C0801} = {F7103498-8B5B-4698-AACE-9E949F732E77} - {5B20BA13-40FF-4743-AEEE-2E3F887F50C6} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {03EC70B8-912C-4FBE-94DD-6327F4F23021} = {83E698F6-F8CD-4604-AB80-01A203389501} - {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} = {D52D5A11-78EF-4154-8298-267738A6715B} - {C037F0CE-8223-4D4A-B15F-18B7D6AA447F} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {E293BB96-5054-497B-BCE5-64AF9B0457B1} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {FB7AF3F8-44CD-4732-8A25-A43902437B89} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {6472B3C1-C237-49CD-82C8-821AD001096A} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {4BE55D79-63E6-4335-A4FA-DFC64BA6CF2F} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {FB0B28CA-EE88-4DBF-9E0D-E442757E2B98} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {47D57848-A910-4869-8A46-84E40A985FEE} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {8A1F9647-B773-40AB-9126-30868014AE58} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {4298F0E2-AE43-433D-B5EA-3FDDEE8E49A0} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {10CF8240-4276-4199-B3D1-C45F16468EBD} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {39DFEFCD-7C73-450F-9A2F-7426188A890B} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {C465BB41-9DB7-470F-BC7F-A59D2A7D6083} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {DD1B10ED-73E2-41BE-928A-46501050FE2A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {7779D9BD-5928-49A2-965F-537967004238} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {AC41F335-E240-47E0-B409-AFAD1400E626} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {1D420BA6-2155-4E0D-AAAF-EECC0330A38C} = {DD1B10ED-73E2-41BE-928A-46501050FE2A} - {59627844-A66A-46AC-B882-E8F302D0EC24} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {2F49E870-DAE2-4D89-98CA-46BBD91C68E2} = {59627844-A66A-46AC-B882-E8F302D0EC24} - {E4CEED06-B8E9-41FA-82BF-5401AE101C4B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {9BDE2F3E-6A95-47AC-9BBC-EC8570F2925A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {B4C8056F-7325-4DB1-9F09-A6F37B052192} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {D5AEBB8E-713C-4DD2-BA18-7B0B48489901} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {CC07A6C2-CD79-4A1E-BE65-C6444AC89C2C} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {DEDB69A9-657F-4B8B-81A7-4ADB19664F35} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {2C86306D-D626-41F8-BA3C-5C9B4123CE7D} = {83E698F6-F8CD-4604-AB80-01A203389501} - {2DC43D15-F20F-44EC-B3A3-47BD8BBB50CA} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {3E32DBDA-1C63-42B4-85D1-E84BBD072D89} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {87CE2F0B-0469-4C76-B325-00EA7AB94B99} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {34987F45-8234-428C-AB41-783D42295C32} = {87CE2F0B-0469-4C76-B325-00EA7AB94B99} - {227DA969-291B-4749-985C-7A83523B7F53} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {CDE35EAE-4B48-40D2-BF57-68EFC5B5A97C} = {87CE2F0B-0469-4C76-B325-00EA7AB94B99} - {F197F8BB-87E3-43FC-92E7-DE8E60EB22E9} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {11CDB632-9A54-439F-8B68-32B3C775BC3A} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {C6D62079-B3F5-4006-AA49-3BF12C4805BB} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {848F6760-9B11-4C9A-9843-9D71DD66D9DA} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {6255DBAD-A388-4418-A5EB-C79630786028} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {A025B8D2-5D92-4023-82AB-97A672A5A132} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {5D99743B-7044-4BE9-8F7A-E195F2A3E2EC} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {E09E476C-9DF8-46AC-848E-4E7635369117} = {3CDBA2A6-DC8A-48C5-8A6C-AF207394B43D} - {E414F7BC-215C-46D0-99EC-CD78EB31FC3C} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {8142FB8C-3D32-4062-BD95-B2F61A1A390A} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {4155336A-DC06-4885-878D-03AF5DFAF47D} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {ADAB35CB-A34E-448D-ACBB-FA054A3B90AA} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {1B112FAC-CB57-48B6-A3D5-95456477CB8D} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {B84E4D98-0B10-4189-8572-F6F7B4E384B7} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {E81EC3E4-521F-4C52-8AA0-A783847E764E} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {49EB2864-B715-47DD-AE47-C5243C656F47} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {A057F430-AD93-49D9-8080-6E074AF05694} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {68538541-4280-46F5-BA08-99ACA8575615} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {F6F93723-5BC3-4D25-A83E-25B41B6D956F} = {A057F430-AD93-49D9-8080-6E074AF05694} - {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {77ED7922-BF30-4436-8A85-78F812583913} = {D52D5A11-78EF-4154-8298-267738A6715B} - {109BF321-1BC6-4031-A59B-7B5375EBA8C5} = {77ED7922-BF30-4436-8A85-78F812583913} - {08A78A69-913B-4C5E-BCE0-739585F82D1E} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {B6857FC4-97C2-4E20-B005-1FAABC574B88} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {B6D4AADE-3ABA-45E6-9916-2F8798412549} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {86E85013-7C71-4770-9323-18897A64F5B2} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {014A9583-0EAA-48A4-ACBE-07DC88159E13} = {4FAE314C-36CB-4E3F-85B7-41D0A428B37D} - {AAC0C407-B4B9-4E90-99FC-2D793AC229D9} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {4C71CA88-0D04-4DDB-8906-B953908B8B8B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {50FF92EA-8BA4-445D-AB04-E7568EE5D3FE} = {77ED7922-BF30-4436-8A85-78F812583913} - {1E00BE51-A1AE-447D-B6E0-F28EC12B259A} = {77ED7922-BF30-4436-8A85-78F812583913} - {61F0EEB2-5ED0-4809-8EF9-0676C7A680CE} = {77ED7922-BF30-4436-8A85-78F812583913} - {72D54834-7ADF-4B18-A745-FCBBC255073B} = {77ED7922-BF30-4436-8A85-78F812583913} - {F6A9D966-0022-440B-AE27-564A74CDED48} = {D52D5A11-78EF-4154-8298-267738A6715B} - {8C99C96A-AE0C-489B-A1A0-AD8442A3B6A3} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {6C0DB8F2-FB0A-4922-B8FE-177DCF37A918} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {D73200F6-CBB3-4BA8-B9BF-7110AAF05596} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {30FB6AD7-3CC5-4A8D-B170-BDA772E6BA3C} = {848F6760-9B11-4C9A-9843-9D71DD66D9DA} - {40D7A0A3-68BD-431E-A67A-E2A35508D55D} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {8EA8C998-F81A-46E9-8C7E-C944D2503A0A} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {47550AB9-FA06-42D6-A4B8-7DD12FE66563} = {529DF802-97C4-4BF2-BE7C-39663B3D9EA3} - {835E51CE-1E6B-4C8C-9736-8C5B61F5E08E} = {F6A9D966-0022-440B-AE27-564A74CDED48} - {FDAAAD2E-42A7-44EC-8971-B5277FD6D404} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {ED3DF100-C5DB-4334-A847-118922B28D95} = {3C7A8246-DE82-4330-8697-24EF1B1C515D} - {15482834-9242-4D20-9736-9DA571A9A83A} = {ABD89F39-62D9-439E-8662-BE4F36BFA04F} - {8A255A72-50FC-460E-9897-FA53F455580B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {CED33625-A034-475B-A4C0-A4E7D1BADD10} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E3BA2413-5755-4F61-9A7C-5D49AE9E7016} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {BF85DB7F-70C2-4804-AA57-FACE204981DA} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {893F7376-0913-43DC-AD3D-40AF5B8F9E3B} = {0439B173-F41E-4CE0-A44A-CCB70328F272} - {8826831D-8733-473A-B47B-A30C3732B13D} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {D1484DD3-BB0A-45A4-BED5-FFA132DE2E72} = {83E698F6-F8CD-4604-AB80-01A203389501} - {54BBA043-317B-4A4F-B583-513D08BC25A7} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {79FA2CBA-2904-4D80-A217-DCC0A38F93C4} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {E469F047-6AD0-4D2B-9900-46358DA3BC30} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {EB9F1905-1798-4766-8347-A8D2A9DBFAED} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {CCE5C620-E17A-4EB1-A17A-9F90311B197D} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {F2AD691B-71B9-4B86-95BC-E020DA6B1E4A} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {76DDE71D-00BD-4BC8-AEA2-31209E2B7E05} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {267933BD-BFB8-4906-BA39-DF193B2FD558} = {B05CB08F-C088-4D6D-97EE-A94A5D1AE4A6} - {3CBD1342-C021-49FB-933F-FAC1DAFC7B48} = {1A23BB7F-1839-4204-88C5-7E9A6C9FBF1E} - {01B86C39-B0C8-48A4-949C-1C63D755B02C} = {F4923692-D343-4318-AECA-96F580B1A563} - {DD6609C7-07AC-49FD-B588-44E649D0AE6E} = {F4923692-D343-4318-AECA-96F580B1A563} - {856B4ACA-BD13-417F-A6E2-0F401F877189} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {B52B199C-0E1C-4CE9-B066-71D26F618424} = {F4923692-D343-4318-AECA-96F580B1A563} - {80F44B5B-F8FF-47FA-9A77-BE2D176B2721} = {370D7CD5-1E17-4F3D-BBFA-03429F6D4F2F} - {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {D52D5A11-78EF-4154-8298-267738A6715B} - {DD365101-E8FC-6516-2883-B9CA024B36FA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {C330BADD-59A0-A3CD-E839-A0D4C2C636EE} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {F1C6C6B6-5B99-5AA6-7F76-27560C111605} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {459DA653-F12A-65B5-41EF-A5877B1C38BA} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {9DD70A99-41A6-8598-553E-2B5AB6277035} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {016CCD97-3551-B6C7-FC6C-FF1CB7F84B88} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {F92EBAA6-5BCF-1B7D-FB5E-CDD9F61CA147} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {AE00DA82-B33A-CAF7-D9CD-D5E26608741B} = {9D1302BE-3886-49F8-B0CD-35D2AC1E5A37} - {F9A0D88F-53AE-4AC7-8E15-163C34386E7C} = {9E72FEB9-A626-4312-892B-CDD043879758} - {0FF0A04C-B580-4A56-9171-CF2988B5DE5A} = {9E72FEB9-A626-4312-892B-CDD043879758} - {F810C8A8-1256-440F-BAAF-7F3588291963} = {9E72FEB9-A626-4312-892B-CDD043879758} - {FFBE3EC6-F11B-4B7C-9BAF-AFBBB12BEF59} = {9E72FEB9-A626-4312-892B-CDD043879758} - {C95DE287-9D21-4DCD-9281-A060B6D99774} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {96748DAE-D367-48C0-B64E-2F25010EAC4D} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {A4633711-7FB6-411A-8D08-BB9A0A778046} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {5A0063BF-EE72-E688-84C6-9E3CE0616C94} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {ECE61F58-1AEC-1E4F-1543-76C2242B6F70} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {B7B63E08-8F62-34F6-FEA5-063267F1FC85} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {7C48C1CA-7E53-4261-A477-454DD3A8402C} = {67DAB2A0-D407-4CAB-8414-AE3D0AC52FC4} - {A54344EB-05A7-A405-5368-4A9C0A60B078} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {7A8A4C74-4B5F-F352-7AC3-54F54AFC3FD6} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {C9266D5D-3860-09C3-F566-489BBB57A534} = {52B5D4F7-237B-4E0A-A167-68442164F70A} - {21542881-C560-4CBB-8AB1-CF757071A057} = {C5CAD011-DF84-4914-939C-0C029DCEF26F} - {F3DF1C3E-7319-48B1-81AB-0284853BB567} = {21542881-C560-4CBB-8AB1-CF757071A057} - {7D7561CB-5059-4F5F-B736-B97195B46A91} = {21542881-C560-4CBB-8AB1-CF757071A057} - {5B9CA129-16CE-4BEF-B22D-C084B38B4EDA} = {21542881-C560-4CBB-8AB1-CF757071A057} - {418EE258-2670-29D3-480F-EC0FD07700E8} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {7984F6B6-726F-9F30-3B6F-08A90AD75A7D} = {8AC72641-30D3-4ACF-89FA-808FADC55C2E} - {D63FEED3-2342-7E96-4121-B0C19CF1EA81} = {6A3FF105-7E8B-4B4D-A736-1C2BAF86FDAA} - {DED16774-635C-D781-4D5B-D1FA56EECF10} = {D01D859E-4B72-478A-BABD-90F0981652D5} - {4105FC8B-E8C6-DBD7-FFEA-EA5AB09C7D08} = {F4923692-D343-4318-AECA-96F580B1A563} - {DD11D070-F39E-1C41-1843-AE3ADBE501EF} = {9E72FEB9-A626-4312-892B-CDD043879758} - {001D0817-1EED-4C04-821E-F815F148EC90} = {9E72FEB9-A626-4312-892B-CDD043879758} - {546E4417-5409-40F4-A125-E08329DD82BB} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {738A72FB-ED83-4127-AA3B-59BF90635F8F} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {9950639D-AA4C-4FF1-A65E-9790EB561C8A} = {A4633711-7FB6-411A-8D08-BB9A0A778046} - {5FA85E8E-3276-43DF-CC93-6A9847905166} = {9E72FEB9-A626-4312-892B-CDD043879758} - {AEEA81D6-B282-93CF-862B-9FCF1A5052F7} = {A5543E56-DA53-494D-A531-DA75091D46FF} - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {B4311504-B0C8-AC8D-02A5-81AD43B4087B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {C4BDA898-00E2-D1DD-F4E8-4DFF5DDF52C9} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {9FF83836-8627-2943-3344-60319FB85B39} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {EB06B90A-D05C-486C-9787-BA5581664641} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {2A2F1DC7-6B19-9ED8-CCA7-39856F713B5D} = {EB06B90A-D05C-486C-9787-BA5581664641} - {1AE7D817-E837-4C25-9850-8AB11030713F} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {1B5368E2-8A31-F686-3120-770BAD793962} = {1AE7D817-E837-4C25-9850-8AB11030713F} - {BFFC0787-81F4-4751-9385-B91BB8CB183A} = {EB06B90A-D05C-486C-9787-BA5581664641} - {E0EEFE73-EF05-491B-A265-E2B613D0C82F} = {EB06B90A-D05C-486C-9787-BA5581664641} - {A4EF0E36-156F-4D12-A6B0-3C681A1AE6A1} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {2AAAA2BE-A9EF-4957-9A5F-5E2CE0834AF8} = {A4EF0E36-156F-4D12-A6B0-3C681A1AE6A1} - {B49BC05C-0F2A-4E09-B6D3-1EE84AE663BC} = {A4EF0E36-156F-4D12-A6B0-3C681A1AE6A1} - {569667D0-2038-4566-9711-6B174C631063} = {A4EF0E36-156F-4D12-A6B0-3C681A1AE6A1} - {7760B229-E3EA-4A60-9E32-7B2F7FB199E7} = {1AE7D817-E837-4C25-9850-8AB11030713F} - {3672F185-59B2-490D-A00B-5CA9815909B6} = {1AE7D817-E837-4C25-9850-8AB11030713F} - {2D8CA6FB-3FE7-4218-829E-0A1B36A5340D} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {1B9DC76D-942D-4DCC-979F-E9E56BB7073E} = {2D8CA6FB-3FE7-4218-829E-0A1B36A5340D} - {7F65C827-914D-42B1-AE26-44053AE3140F} = {2D8CA6FB-3FE7-4218-829E-0A1B36A5340D} - {1425C1AB-048F-4ABF-ACAB-793E2524F0A8} = {2D8CA6FB-3FE7-4218-829E-0A1B36A5340D} - {647AB3E7-2F32-43D1-AFDC-877C7412F4DA} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {4F4BC2BD-6236-4E8B-B95F-0F4D455EFE14} = {647AB3E7-2F32-43D1-AFDC-877C7412F4DA} - {09B8B63F-972B-4055-9BAD-B2883EBA3EF0} = {647AB3E7-2F32-43D1-AFDC-877C7412F4DA} - {4D2D6CAF-75C7-4A9D-9BFB-FFE7A29D0E99} = {647AB3E7-2F32-43D1-AFDC-877C7412F4DA} - {0EEA73CA-D8DD-F044-045D-F070F8831E26} = {77ED7922-BF30-4436-8A85-78F812583913} - {B6452D3F-E58C-C433-E52A-F65EE2657E01} = {77ED7922-BF30-4436-8A85-78F812583913} - {19F90E75-657C-4542-A798-8E9CE9AF3128} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {62FB9F56-221E-47D5-8B30-311A13D6A568} = {19F90E75-657C-4542-A798-8E9CE9AF3128} - {9F260C45-199D-460C-A5C0-6C2B62594DFA} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {ACEEA6F9-868B-4701-AF65-89292F656A1D} = {9F260C45-199D-460C-A5C0-6C2B62594DFA} - {FB12303C-7A3A-4A42-900F-C131D0FD7BA2} = {9F260C45-199D-460C-A5C0-6C2B62594DFA} - {BAE82F6F-2528-45DF-9571-F733C31CEB1E} = {9F260C45-199D-460C-A5C0-6C2B62594DFA} - {97C66786-03F8-4886-088E-FA1BECB1C574} = {77ED7922-BF30-4436-8A85-78F812583913} - {7B927926-0AF4-A6F2-8ABA-331A6C138EAC} = {77ED7922-BF30-4436-8A85-78F812583913} - {C45D8013-A6DD-6FC2-7FEA-F20D3373ACFA} = {77ED7922-BF30-4436-8A85-78F812583913} - {6FCE34BF-077B-9425-CD34-FA9B2CD190FA} = {77ED7922-BF30-4436-8A85-78F812583913} - {A3DFC5C8-CA0F-3161-7B9B-AC597ACBF889} = {77ED7922-BF30-4436-8A85-78F812583913} - {107C0D30-35C1-142B-209A-29BD6BAE7DE9} = {77ED7922-BF30-4436-8A85-78F812583913} - {D8AF0368-077D-4AAD-9929-43C598DE13B5} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {DB03F47B-4E3A-4484-86DC-741472AD49A3} = {D8AF0368-077D-4AAD-9929-43C598DE13B5} - {2DB2EADB-745A-4442-A48A-B1B721412F78} = {D8AF0368-077D-4AAD-9929-43C598DE13B5} - {4524F120-F72B-4373-B731-6A2D0EF633A7} = {D8AF0368-077D-4AAD-9929-43C598DE13B5} - {0DB2CBEE-66E9-C5AA-ABC7-28CE5F8B65DD} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {8880DC40-7C67-AEBC-AFD6-45094E65D01B} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {DCC20D07-E8EE-ACD7-CF8B-29BB1CD84CD0} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {A076DAB1-03F6-0592-4900-5CEF38A76026} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {9CA173D6-B883-9629-EFB3-A37D89AAEE81} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {FDE1FE78-B568-3602-653D-2E641AD999D5} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {2F99A8DC-3A89-3004-66F2-B61158DA9F61} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {4AC7962E-AB5E-BEE5-DC17-22A29FE73DED} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {E5343E6A-61DC-46E0-6A7A-9F93362AF113} = {13ACF670-F109-404E-B252-2FA34A4EA061} - {125E78AC-071D-4F82-88CE-1D7D2D0AAFF4} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {A768070E-FF34-424C-9945-B75533E7ADD3} = {125E78AC-071D-4F82-88CE-1D7D2D0AAFF4} - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {AB981FD3-3523-CDEA-73C9-D6280400062C} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {B760E50F-F5B6-1266-02A8-0056483F475B} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {CDD00CAC-4A4E-FAD5-E8C3-B833C2994314} = {DD9BE9E7-F6BF-4869-BCD2-82F5072BDA21} - {F38C6E5A-1C5F-49FF-9174-95430D6C91ED} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {56778F12-42F0-4288-B559-218FC5A3C323} = {F38C6E5A-1C5F-49FF-9174-95430D6C91ED} - {A72387FE-3361-45B3-AE7A-8BB212668A85} = {D52D5A11-78EF-4154-8298-267738A6715B} - {6120F990-8729-DD52-5CEA-F2295528ED07} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {32C35E78-BE23-2D27-F1B3-C2270E45B0C4} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {9AC112AD-18C2-359E-6696-87B814A69E63} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {B4BC25CA-1A15-DA3F-7BE7-C14713F3BA80} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {D74CF5EA-4BE7-4F23-663A-490C29D7576A} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {73A8BAF3-10A7-1C52-7CFF-6301B730A458} = {A72387FE-3361-45B3-AE7A-8BB212668A85} - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2} = {77ED7922-BF30-4436-8A85-78F812583913} - {52186445-5B56-EA32-F154-39F47D2FB235} = {0A00FAF9-A96B-4BF5-8D42-15C8678F70F3} - {B856BFF0-8D0E-4C4A-97C7-5406E1B7613C} = {FAB71536-FCDB-4135-B61A-732B72FDA6A6} - {410E0FFF-705D-4471-9E52-FF495096A945} = {B856BFF0-8D0E-4C4A-97C7-5406E1B7613C} - {ABCAB030-29ED-8219-F1DB-39D16098805F} = {77ED7922-BF30-4436-8A85-78F812583913} - {C4F5372D-3127-A2CA-3B22-B343D5E54EB5} = {77ED7922-BF30-4436-8A85-78F812583913} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {C95FDF91-16F2-4A8B-A4BE-0E62D1B66718} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.Aspire.slnx b/aspnet-core/LINGYUN.MicroService.Aspire.slnx index 2f1617f3d..d5539f4c5 100644 --- a/aspnet-core/LINGYUN.MicroService.Aspire.slnx +++ b/aspnet-core/LINGYUN.MicroService.Aspire.slnx @@ -1,4 +1,7 @@ + + + @@ -132,6 +135,9 @@ + + + @@ -148,6 +154,7 @@ + @@ -302,6 +309,20 @@ + + + + + + + + + + + + + + @@ -317,21 +338,6 @@ - - - - - - - - - - - - - - - @@ -353,6 +359,7 @@ + @@ -398,24 +405,6 @@ - - - - - - - - - - - - - - - - - - @@ -499,6 +488,9 @@ + + + @@ -555,6 +547,13 @@ + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.Common.sln b/aspnet-core/LINGYUN.MicroService.Common.sln deleted file mode 100644 index fa5a9c662..000000000 --- a/aspnet-core/LINGYUN.MicroService.Common.sln +++ /dev/null @@ -1,1246 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{02EA4E78-5891-43BC-944F-3E52FEE032E4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{086BE5BE-8594-4DA7-8819-935FEF76DABD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{5A87E9DD-3340-44DC-9564-4D8832A0228E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json", "framework\common\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json\LINGYUN.Abp.AspNetCore.SignalR.Protocol.Json.csproj", "{E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.SignalR.JwtToken", "framework\common\LINGYUN.Abp.AspNetCore.SignalR\LINGYUN.Abp.AspNetCore.SignalR.JwtToken.csproj", "{304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundJobs.Hangfire", "framework\common\LINGYUN.Abp.BackgroundJobs.Hangfire\LINGYUN.Abp.BackgroundJobs.Hangfire.csproj", "{492710E6-EEF5-4390-A474-8FB2412ECBE5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun", "framework\common\LINGYUN.Abp.BlobStoring.Aliyun\LINGYUN.Abp.BlobStoring.Aliyun.csproj", "{CCF1EB86-29BD-4531-BB27-C9111CC67570}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{7947D559-4288-486B-8FB3-D957CC7EDD32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{A4195E41-3919-4C3E-8768-7F277B583D16}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{60083380-062C-4914-9E4E-5AE6637CCC3F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\realtime-notifications\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "framework\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{34C1E979-65B9-46F5-B7BA-60F227EBA093}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{80A56461-0ACC-4069-B571-87DCA064B2EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.MySql", "framework\common\LINGYUN.Abp.Hangfire.MySqlStorage\LINGYUN.Abp.Hangfire.Storage.MySql.csproj", "{568D2C50-1C31-4C31-89A2-C608FA93C6FD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Storage.SqlServer", "framework\common\LINGYUN.Abp.Hangfire.Storage.SqlServer\LINGYUN.Abp.Hangfire.Storage.SqlServer.csproj", "{12451B83-18DE-4E93-B98C-509477D53D5E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location", "framework\common\LINGYUN.Abp.Location\LINGYUN.Abp.Location.csproj", "{AAD0B6A7-847A-4537-A300-50E37F4B70CC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu", "framework\common\LINGYUN.Abp.Location.Baidu\LINGYUN.Abp.Location.Baidu.csproj", "{5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent", "framework\common\LINGYUN.Abp.Location.Tencent\LINGYUN.Abp.Location.Tencent.csproj", "{2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\realtime-notifications\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{B31CEE79-45F6-4BB9-9EEB-08843C324B37}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{22C61434-D29A-4376-AD56-F5089F3E617A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{865D5508-63CD-4D44-9F5B-AE5CD4A43D08}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Settings", "framework\settings\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{ECAA4B82-A240-4747-888C-FACD8634D389}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "framework\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "alibaba-cloud", "alibaba-cloud", "{7F18BCA5-35BD-41FB-8EFF-801B56E5E414}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "signalr", "signalr", "{E2E7A062-0ABB-41B4-8220-60228446D2C2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "location", "location", "{EFFAF456-50C1-42C9-836E-E95E7A38D52C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{B91F26C5-B148-4094-B5F1-71E5F945DBED}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "features", "features", "{0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "framework\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "framework\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{99F8F254-A76E-43BB-8048-CC17EE1C8527}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{38E21687-5F19-42C9-9D11-4B1D2EF64EDB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Sms", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Sms\LINGYUN.Abp.Notifications.Sms.csproj", "{15FC0C39-A604-491F-91F6-BD44167FC5F6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{16942653-B746-4917-B3BF-464C99F8832F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Core", "framework\common\LINGYUN.Abp.Core\LINGYUN.Abp.Core.csproj", "{A7A28D6C-6EDB-4615-8899-7DE1D435B750}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{17A8455F-D413-4664-AEFA-1ECAE9ED4B19}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{B86C21A4-73B7-471E-B73A-B4B905EC9435}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Aliyun.Tests", "tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests\LINGYUN.Abp.BlobStoring.Aliyun.Tests.csproj", "{2E35CB93-2E9C-4EE1-845F-72A40271648E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "console", "console", "{8D2AD50B-DD4B-48A2-88EC-0E8E8236D883}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Encryption.Console", "framework\console\LINGYUN.Abp.Encryption.Console\LINGYUN.Abp.Encryption.Console.csproj", "{8FB74B18-CA5C-4DC3-8DFA-600133A05712}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{3DBF0975-B09D-49CA-9AF8-69175EDB9D52}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun.Tests", "tests\LINGYUN.Abp.Sms.Aliyun.Tests\LINGYUN.Abp.Sms.Aliyun.Tests.csproj", "{93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Baidu.Tests", "tests\LINGYUN.Abp.Location.Baidu.Tests\LINGYUN.Abp.Location.Baidu.Tests.csproj", "{221725FF-6C01-4F41-9F29-AC04C7D52611}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Location.Tencent.Tests", "tests\LINGYUN.Abp.Location.Tencent.Tests\LINGYUN.Abp.Location.Tencent.Tests.csproj", "{1B494EA1-28CF-4A61-B0BE-70BBA425C316}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Client", "framework\common\LINGYUN.Abp.AspNetCore.Mvc.Client\LINGYUN.Abp.AspNetCore.Mvc.Client.csproj", "{7F767ACF-754A-4EBC-8936-3C1402B6EF82}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{E73A0F8B-2B4B-4CED-82A4-1EE5E0B89744}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml", "framework\localization\LINGYUN.Abp.Localization.Xml\LINGYUN.Abp.Localization.Xml.csproj", "{8CC72F4E-F134-4A43-9037-5D4D1F29B68A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.Xml.Tests", "tests\LINGYUN.Abp.Localization.Xml.Tests\LINGYUN.Abp.Localization.Xml.Tests.csproj", "{94FEA59E-3B6D-41A0-9E44-BA5D6477244F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{7FDFB22F-1BFF-4E05-9427-78B7A8461D50}" - ProjectSection(SolutionItems) = preProject - framework\dapr\README.md = framework\dapr\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors", "framework\dapr\LINGYUN.Abp.Dapr.Actors\LINGYUN.Abp.Dapr.Actors.csproj", "{C72E0407-06FE-4CAA-86E5-30FF216A7B82}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore\LINGYUN.Abp.Dapr.Actors.AspNetCore.csproj", "{E74FF671-6E5E-430C-9211-ED910634DDBE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{879791A3-BD69-42E4-A3BC-9878EFAADDD1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "rules", "rules", "{C8891F1A-E6E5-448A-B527-EBFA44D20808}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules", "framework\rules\LINGYUN.Abp.Rules\LINGYUN.Abp.Rules.csproj", "{5133D83C-9B23-491C-8780-3F9BBDBD0351}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules", "framework\rules\LINGYUN.Abp.Rules.NRules\LINGYUN.Abp.Rules.NRules.csproj", "{B8E5026B-188F-422F-A1EA-502C4A394585}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine", "framework\rules\LINGYUN.Abp.Rules.RulesEngine\LINGYUN.Abp.Rules.RulesEngine.csproj", "{E861BE01-689D-4637-A5DC-E78E234F83FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.RulesEngine.Tests", "tests\LINGYUN.Abp.Rules.RulesEngine.Tests\LINGYUN.Abp.Rules.RulesEngine.Tests.csproj", "{CF253F0A-3A45-40EE-875F-0E57C8968C48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Rules.NRules.Tests", "tests\LINGYUN.Abp.Rules.NRules.Tests\LINGYUN.Abp.Rules.NRules.Tests.csproj", "{EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client.Tests", "tests\LINGYUN.Abp.Dapr.Client.Tests\LINGYUN.Abp.Dapr.Client.Tests.csproj", "{9403FC1F-9677-489F-A03A-0B456153EE86}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Tests", "tests\LINGYUN.Abp.Dapr.Tests\LINGYUN.Abp.Dapr.Tests.csproj", "{26E87199-F0AD-4B30-B0E4-080B12E6F8FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.AspNetCore.TestHost", "tests\LINGYUN.Abp.Dapr.AspNetCore.TestHost\LINGYUN.Abp.Dapr.AspNetCore.TestHost.csproj", "{8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.Tests", "tests\LINGYUN.Abp.Dapr.Actors.Tests\LINGYUN.Abp.Dapr.Actors.Tests.csproj", "{CF30221B-CA7A-42CD-B91A-B7224AB2F38B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{191BB108-546E-4E70-978E-D6A8149C319C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{DEB98AD7-9630-4F32-89E6-C1A118D1D18C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat", "framework\wechat\LINGYUN.Abp.Identity.WeChat\LINGYUN.Abp.Identity.WeChat.csproj", "{00F1D30E-A6F6-464F-A80B-D423CFAA79A3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elasticsearch", "elasticsearch", "{358A4FB1-F5DF-433C-9DA7-D27401155AD7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{2584D823-53A7-4184-8295-719A41E5B440}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{6271EBC0-78F2-4E4F-A646-BBD15BCB0F84}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{C1A91534-E84F-4A98-9A78-135988030646}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{0CC508D7-480C-4409-842A-A6C10E11ACFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch.Tests", "tests\LINGYUN.Abp.AuditLogging.Elasticsearch.Tests\LINGYUN.Abp.AuditLogging.Elasticsearch.Tests.csproj", "{F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{23F4260D-87C1-4AA6-A302-0A8A76D53BA1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging", "framework\logging\LINGYUN.Abp.Logging\LINGYUN.Abp.Logging.csproj", "{CE7E525F-8628-4076-8A2E-B615B944D140}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging.Serilog.Elasticsearch", "framework\logging\LINGYUN.Abp.Logging.Serilog.Elasticsearch\LINGYUN.Abp.Logging.Serilog.Elasticsearch.csproj", "{CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{3993A315-B250-4C5D-98C7-90FD06841B66}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{A0910407-CE69-4DC8-9721-F4324C22EEA8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection", "framework\data-protection\LINGYUN.Abp.DataProtection\LINGYUN.Abp.DataProtection.csproj", "{519BF5DA-30E4-40CF-829A-93F526E2AED8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.EntityFrameworkCore", "framework\data-protection\LINGYUN.Abp.DataProtection.EntityFrameworkCore\LINGYUN.Abp.DataProtection.EntityFrameworkCore.csproj", "{E16CCB14-E629-48E6-9603-53BBFF185318}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Tests", "tests\LINGYUN.Abp.DataProtection.Tests\LINGYUN.Abp.DataProtection.Tests.csproj", "{FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.EntityFrameworkCore.Tests\LINGYUN.Abp.EntityFrameworkCore.Tests.csproj", "{2F556889-006C-4A9C-8CA3-E31200C06FC9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{73C9A7E7-846D-49E2-B223-E705D6C48BE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{328B0863-23BE-43FD-98DD-FF0C92D5BEF0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mvc", "mvc", "{F55B987D-1DFF-4EB0-9949-8A7136A7B689}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Tests", "tests\LINGYUN.Abp.AspNetCore.Tests\LINGYUN.Abp.AspNetCore.Tests.csproj", "{BD4165DB-F8A4-4715-A05A-CC08F6A18D67}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Tests", "tests\LINGYUN.Abp.AspNetCore.Mvc.Tests\LINGYUN.Abp.AspNetCore.Mvc.Tests.csproj", "{AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper.Tests", "tests\LINGYUN.Abp.Wrapper.Tests\LINGYUN.Abp.Wrapper.Tests.csproj", "{31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "open-api", "open-api", "{8C688427-DD35-4F0B-86DA-6F536D3852D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi", "framework\open-api\LINGYUN.Abp.OpenApi\LINGYUN.Abp.OpenApi.csproj", "{2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.Authorization", "framework\open-api\LINGYUN.Abp.OpenApi.Authorization\LINGYUN.Abp.OpenApi.Authorization.csproj", "{3CE350AF-5574-46EC-8120-8542350AED20}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cli", "cli", "{FE372F22-80A2-4859-9330-949C27CA94ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Cli", "framework\cli\LINGYUN.Abp.Cli\LINGYUN.Abp.Cli.csproj", "{33007EF7-BC1D-4B32-ACDA-6B9117200FAD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Client.Wrapper\LINGYUN.Abp.Dapr.Client.Wrapper.csproj", "{B9592989-9F76-413C-8612-96E8C0CFA041}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{F7878090-7FD6-4A2E-8D61-CAA0997880D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{7EDBCC52-3089-49F6-A56A-650850C9797E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hangfire", "hangfire", "{3A0784A6-AFBF-406F-B79E-9505EB100445}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Hangfire.Dashboard", "framework\common\LINGYUN.Abp.Hangfire.Dashboard\LINGYUN.Abp.Hangfire.Dashboard.csproj", "{FF518E10-C9AB-440C-8E8D-9CFF67A926AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper\LINGYUN.Abp.Dapr.Actors.AspNetCore.Wrapper.csproj", "{49E0B90B-8635-43D0-B0AB-9D484CAE68B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{3FF4CEA0-1555-4D62-AA81-B3B599253F8D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhooks", "webhooks", "{BD97C98B-0B4B-443D-AB29-145A344F46D3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebHooks", "modules\webhooks\LINGYUN.Abp.WebHooks\LINGYUN.Abp.WebHooks.csproj", "{AFE75D2B-8853-488B-B5D5-277B58C5DBB2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{3971AD93-BF97-4E05-972D-CB5EB9F6CB88}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{D9339CBB-45B9-4701-B2AC-2A75FF20D77B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.OrganizaztionUnits", "modules\identity\LINGYUN.Abp.Identity.OrganizaztionUnits\LINGYUN.Abp.Identity.OrganizaztionUnits.csproj", "{474AA48F-65F9-436B-A0B1-1E95BD16CA8D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DistributedLocking.Dapr", "framework\dapr\LINGYUN.Abp.DistributedLocking.Dapr\LINGYUN.Abp.DistributedLocking.Dapr.csproj", "{C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "pushplus", "pushplus", "{0F5A2591-CE08-4184-A5F3-89F6FB3B2B10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus", "framework\pushplus\LINGYUN.Abp.PushPlus\LINGYUN.Abp.PushPlus.csproj", "{5515C7CA-B512-4E36-A202-49A0158A0E74}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.PushPlus", "modules\realtime-notifications\LINGYUN.Abp.Notifications.PushPlus\LINGYUN.Abp.Notifications.PushPlus.csproj", "{EBA67EAD-4958-46E3-9E0C-8186394D083F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Emailing", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Emailing\LINGYUN.Abp.Notifications.Emailing.csproj", "{25891EE2-3166-420F-8408-E458030C4643}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{F051C960-AA61-4283-A088-611C0B96C953}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus.Tests", "tests\LINGYUN.Abp.PushPlus.Tests\LINGYUN.Abp.PushPlus.Tests.csproj", "{1435711B-D796-42AB-B567-0BB23F02EE08}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wx-pusher", "wx-pusher", "{7862CE70-76EF-4228-A703-C2E2A9704D14}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher", "framework\wx-pusher\LINGYUN.Abp.WxPusher\LINGYUN.Abp.WxPusher.csproj", "{1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher.Tests", "tests\LINGYUN.Abp.WxPusher.Tests\LINGYUN.Abp.WxPusher.Tests.csproj", "{88412E3D-21C8-4FF1-8EB3-84CB74094336}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WxPusher", "framework\wx-pusher\LINGYUN.Abp.Identity.WxPusher\LINGYUN.Abp.Identity.WxPusher.csproj", "{30FA01ED-921A-4E7D-9E83-6719538FB866}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WxPusher.SettingManagement", "framework\wx-pusher\LINGYUN.Abp.WxPusher.SettingManagement\LINGYUN.Abp.WxPusher.SettingManagement.csproj", "{E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PushPlus.SettingManagement", "framework\pushplus\LINGYUN.Abp.PushPlus.SettingManagement\LINGYUN.Abp.PushPlus.SettingManagement.csproj", "{4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WxPusher.Tests", "tests\LINGYUN.Abp.Notifications.WxPusher.Tests\LINGYUN.Abp.Notifications.WxPusher.Tests.csproj", "{C2801414-550F-4A25-AD8D-68AC508211DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Tests", "tests\LINGYUN.Abp.Notifications.Tests\LINGYUN.Abp.Notifications.Tests.csproj", "{868A1718-4970-48D2-A256-08EF468302D8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests", "tests\LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests\LINGYUN.Abp.Notifications.WeChat.MiniProgram.Tests.csproj", "{B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{AA039B4E-CE12-43AC-8340-3D52463E971E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tui-juhe", "tui-juhe", "{A1C75C3E-67D1-4BCE-89BF-44A735909BD5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TuiJuhe", "framework\tui-juhe\LINGYUN.Abp.TuiJuhe\LINGYUN.Abp.TuiJuhe.csproj", "{60143C9C-E539-498A-9DBE-B95E6A8301A5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.TuiJuhe.Tests", "tests\LINGYUN.Abp.Notifications.TuiJuhe.Tests\LINGYUN.Abp.Notifications.TuiJuhe.Tests.csproj", "{641DF0BA-0E79-441D-B328-FDA288A35CDE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TuiJuhe.Tests", "tests\LINGYUN.Abp.TuiJuhe.Tests\LINGYUN.Abp.TuiJuhe.Tests.csproj", "{2020EA8D-F276-498D-92D1-94D1E25F8E1A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TuiJuhe.SettingManagement", "framework\tui-juhe\LINGYUN.Abp.TuiJuhe.SettingManagement\LINGYUN.Abp.TuiJuhe.SettingManagement.csproj", "{2A3DF8B2-4760-41C4-9337-44FEE29B17CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dynamic-queryable", "dynamic-queryable", "{3975D028-3672-4D23-BF77-B7F4A445D44E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable", "framework\dynamic-queryable\LINGYUN.Linq.Dynamic.Queryable\LINGYUN.Linq.Dynamic.Queryable.csproj", "{5512A359-80E8-440C-B652-7C96F614DD9E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application.Contracts", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts.csproj", "{6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application\LINGYUN.Abp.Dynamic.Queryable.Application.csproj", "{EC7970DC-A656-46A7-9873-A730FE72B213}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.HttpApi", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.HttpApi\LINGYUN.Abp.Dynamic.Queryable.HttpApi.csproj", "{F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable.Tests", "tests\LINGYUN.Linq.Dynamic.Queryable.Tests\LINGYUN.Linq.Dynamic.Queryable.Tests.csproj", "{E9AD81CA-D992-4F74-BD23-680CF98BE262}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DynamicQueryable.EntityFrameworkCore.Tests", "tests\LINGYUN.Abp.DynamicQueryable.EntityFrameworkCore.Tests\LINGYUN.Abp.DynamicQueryable.EntityFrameworkCore.Tests.csproj", "{2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{1206B9FC-0177-4061-A06E-F82B2CC01ACE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{809C86E9-0C70-41E4-B26D-D9AFF34F03D0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tencent-cloud", "tencent-cloud", "{C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{B6A5E070-3A2A-4F53-8391-0CA0C60B7701}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Sms.Tencent\LINGYUN.Abp.Sms.Tencent.csproj", "{33CBF722-B166-4B68-9CB3-1293F5C78EF5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.QQ", "framework\cloud-tencent\LINGYUN.Abp.Tencent.QQ\LINGYUN.Abp.Tencent.QQ.csproj", "{4CEFE059-B30E-4121-AA12-10EC72709758}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Tencent", "framework\cloud-tencent\LINGYUN.Abp.BlobStoring.Tencent\LINGYUN.Abp.BlobStoring.Tencent.csproj", "{C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.TTS", "framework\cloud-tencent\LINGYUN.Abp.Tencent.TTS\LINGYUN.Abp.Tencent.TTS.csproj", "{4059233C-C651-4DA2-A1BC-26196362062A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{B8DA7627-E691-400A-AE4D-0E151A6EA0F8}" - ProjectSection(SolutionItems) = preProject - ..\common.props = ..\common.props - ..\common.secrets.props = ..\common.secrets.props - ..\configureawait.props = ..\configureawait.props - ..\Directory.Build.props = ..\Directory.Build.props - ..\Directory.Packages.props = ..\Directory.Packages.props - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Idempotent", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Idempotent\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.csproj", "{347413DD-1B30-46B5-87A0-828A11FAA87D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Idempotent", "framework\common\LINGYUN.Abp.Idempotent\LINGYUN.Abp.Idempotent.csproj", "{13FCEB03-E300-4CE2-A789-78D9F41C903E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper.csproj", "{8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.TuiJuhe", "modules\realtime-notifications\LINGYUN.Abp.Notifications.TuiJuhe\LINGYUN.Abp.Notifications.TuiJuhe.csproj", "{57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WxPusher", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WxPusher\LINGYUN.Abp.Notifications.WxPusher.csproj", "{7433B116-806E-4500-8FF8-6143C4140BFD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{2C01C5C9-F762-4455-AD66-810BEFEE67B5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Encryption.SM4", "framework\security\LINGYUN.Abp.Encryption.SM4\LINGYUN.Abp.Encryption.SM4.csproj", "{DEB4B926-4D9F-4410-B49D-BF87F91399C2}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Encryption.SM4.Tests", "tests\LINGYUN.Abp.Encryption.SM4.Tests\LINGYUN.Abp.Encryption.SM4.Tests.csproj", "{920C78AF-E768-486B-8F3F-F36552791366}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - PostgreSQL|Any CPU = PostgreSQL|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5A87E9DD-3340-44DC-9564-4D8832A0228E}.Release|Any CPU.Build.0 = Release|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4}.Release|Any CPU.Build.0 = Release|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2}.Release|Any CPU.Build.0 = Release|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC}.Release|Any CPU.Build.0 = Release|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {492710E6-EEF5-4390-A474-8FB2412ECBE5}.Release|Any CPU.Build.0 = Release|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCF1EB86-29BD-4531-BB27-C9111CC67570}.Release|Any CPU.Build.0 = Release|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7947D559-4288-486B-8FB3-D957CC7EDD32}.Release|Any CPU.Build.0 = Release|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4195E41-3919-4C3E-8768-7F277B583D16}.Release|Any CPU.Build.0 = Release|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60083380-062C-4914-9E4E-5AE6637CCC3F}.Release|Any CPU.Build.0 = Release|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845}.Release|Any CPU.Build.0 = Release|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34C1E979-65B9-46F5-B7BA-60F227EBA093}.Release|Any CPU.Build.0 = Release|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80A56461-0ACC-4069-B571-87DCA064B2EF}.Release|Any CPU.Build.0 = Release|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {568D2C50-1C31-4C31-89A2-C608FA93C6FD}.Release|Any CPU.Build.0 = Release|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12451B83-18DE-4E93-B98C-509477D53D5E}.Release|Any CPU.Build.0 = Release|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AAD0B6A7-847A-4537-A300-50E37F4B70CC}.Release|Any CPU.Build.0 = Release|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB}.Release|Any CPU.Build.0 = Release|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2}.Release|Any CPU.Build.0 = Release|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE}.Release|Any CPU.Build.0 = Release|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B31CEE79-45F6-4BB9-9EEB-08843C324B37}.Release|Any CPU.Build.0 = Release|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08}.Release|Any CPU.Build.0 = Release|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECAA4B82-A240-4747-888C-FACD8634D389}.Release|Any CPU.Build.0 = Release|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0}.Release|Any CPU.Build.0 = Release|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5}.Release|Any CPU.Build.0 = Release|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.Debug|Any CPU.Build.0 = Debug|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.Release|Any CPU.ActiveCfg = Release|Any CPU - {99F8F254-A76E-43BB-8048-CC17EE1C8527}.Release|Any CPU.Build.0 = Release|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15FC0C39-A604-491F-91F6-BD44167FC5F6}.Release|Any CPU.Build.0 = Release|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8}.Release|Any CPU.Build.0 = Release|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16942653-B746-4917-B3BF-464C99F8832F}.Release|Any CPU.Build.0 = Release|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6}.Release|Any CPU.Build.0 = Release|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A7A28D6C-6EDB-4615-8899-7DE1D435B750}.Release|Any CPU.Build.0 = Release|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19}.Release|Any CPU.Build.0 = Release|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25}.Release|Any CPU.Build.0 = Release|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E35CB93-2E9C-4EE1-845F-72A40271648E}.Release|Any CPU.Build.0 = Release|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FB74B18-CA5C-4DC3-8DFA-600133A05712}.Release|Any CPU.Build.0 = Release|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52}.Release|Any CPU.Build.0 = Release|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C}.Release|Any CPU.Build.0 = Release|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.Debug|Any CPU.Build.0 = Debug|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.Release|Any CPU.ActiveCfg = Release|Any CPU - {221725FF-6C01-4F41-9F29-AC04C7D52611}.Release|Any CPU.Build.0 = Release|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1B494EA1-28CF-4A61-B0BE-70BBA425C316}.Release|Any CPU.Build.0 = Release|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F767ACF-754A-4EBC-8936-3C1402B6EF82}.Release|Any CPU.Build.0 = Release|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A}.Release|Any CPU.Build.0 = Release|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F}.Release|Any CPU.Build.0 = Release|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C72E0407-06FE-4CAA-86E5-30FF216A7B82}.Release|Any CPU.Build.0 = Release|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E74FF671-6E5E-430C-9211-ED910634DDBE}.Release|Any CPU.Build.0 = Release|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {879791A3-BD69-42E4-A3BC-9878EFAADDD1}.Release|Any CPU.Build.0 = Release|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5133D83C-9B23-491C-8780-3F9BBDBD0351}.Release|Any CPU.Build.0 = Release|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8E5026B-188F-422F-A1EA-502C4A394585}.Release|Any CPU.Build.0 = Release|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E861BE01-689D-4637-A5DC-E78E234F83FB}.Release|Any CPU.Build.0 = Release|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF253F0A-3A45-40EE-875F-0E57C8968C48}.Release|Any CPU.Build.0 = Release|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF}.Release|Any CPU.Build.0 = Release|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9403FC1F-9677-489F-A03A-0B456153EE86}.Release|Any CPU.Build.0 = Release|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC}.Release|Any CPU.Build.0 = Release|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC}.Release|Any CPU.Build.0 = Release|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B}.Release|Any CPU.Build.0 = Release|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {191BB108-546E-4E70-978E-D6A8149C319C}.Release|Any CPU.Build.0 = Release|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C}.Release|Any CPU.Build.0 = Release|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3}.Release|Any CPU.Build.0 = Release|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2584D823-53A7-4184-8295-719A41E5B440}.Release|Any CPU.Build.0 = Release|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1A91534-E84F-4A98-9A78-135988030646}.Release|Any CPU.Build.0 = Release|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0CC508D7-480C-4409-842A-A6C10E11ACFD}.Release|Any CPU.Build.0 = Release|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C}.Release|Any CPU.Build.0 = Release|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE7E525F-8628-4076-8A2E-B615B944D140}.Release|Any CPU.Build.0 = Release|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02}.Release|Any CPU.Build.0 = Release|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672}.Release|Any CPU.Build.0 = Release|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3993A315-B250-4C5D-98C7-90FD06841B66}.Release|Any CPU.Build.0 = Release|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {519BF5DA-30E4-40CF-829A-93F526E2AED8}.Release|Any CPU.Build.0 = Release|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E16CCB14-E629-48E6-9603-53BBFF185318}.Release|Any CPU.Build.0 = Release|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D}.Release|Any CPU.Build.0 = Release|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F556889-006C-4A9C-8CA3-E31200C06FC9}.Release|Any CPU.Build.0 = Release|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {73C9A7E7-846D-49E2-B223-E705D6C48BE7}.Release|Any CPU.Build.0 = Release|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0}.Release|Any CPU.Build.0 = Release|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F}.Release|Any CPU.Build.0 = Release|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67}.Release|Any CPU.Build.0 = Release|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502}.Release|Any CPU.Build.0 = Release|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C}.Release|Any CPU.Build.0 = Release|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2}.Release|Any CPU.Build.0 = Release|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3CE350AF-5574-46EC-8120-8542350AED20}.Release|Any CPU.Build.0 = Release|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD}.Release|Any CPU.Build.0 = Release|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B9592989-9F76-413C-8612-96E8C0CFA041}.Release|Any CPU.Build.0 = Release|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7EDBCC52-3089-49F6-A56A-650850C9797E}.Release|Any CPU.Build.0 = Release|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC}.Release|Any CPU.Build.0 = Release|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5}.Release|Any CPU.Build.0 = Release|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D}.Release|Any CPU.Build.0 = Release|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2}.Release|Any CPU.Build.0 = Release|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B}.Release|Any CPU.Build.0 = Release|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D}.Release|Any CPU.Build.0 = Release|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0}.Release|Any CPU.Build.0 = Release|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5515C7CA-B512-4E36-A202-49A0158A0E74}.Release|Any CPU.Build.0 = Release|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EBA67EAD-4958-46E3-9E0C-8186394D083F}.Release|Any CPU.Build.0 = Release|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.Debug|Any CPU.Build.0 = Debug|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.Release|Any CPU.ActiveCfg = Release|Any CPU - {25891EE2-3166-420F-8408-E458030C4643}.Release|Any CPU.Build.0 = Release|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F051C960-AA61-4283-A088-611C0B96C953}.Release|Any CPU.Build.0 = Release|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1435711B-D796-42AB-B567-0BB23F02EE08}.Release|Any CPU.Build.0 = Release|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF}.Release|Any CPU.Build.0 = Release|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88412E3D-21C8-4FF1-8EB3-84CB74094336}.Release|Any CPU.Build.0 = Release|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30FA01ED-921A-4E7D-9E83-6719538FB866}.Release|Any CPU.Build.0 = Release|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36}.Release|Any CPU.Build.0 = Release|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839}.Release|Any CPU.Build.0 = Release|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2801414-550F-4A25-AD8D-68AC508211DC}.Release|Any CPU.Build.0 = Release|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {868A1718-4970-48D2-A256-08EF468302D8}.Release|Any CPU.Build.0 = Release|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB}.Release|Any CPU.Build.0 = Release|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AA039B4E-CE12-43AC-8340-3D52463E971E}.Release|Any CPU.Build.0 = Release|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3}.Release|Any CPU.Build.0 = Release|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60143C9C-E539-498A-9DBE-B95E6A8301A5}.Release|Any CPU.Build.0 = Release|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {641DF0BA-0E79-441D-B328-FDA288A35CDE}.Release|Any CPU.Build.0 = Release|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2020EA8D-F276-498D-92D1-94D1E25F8E1A}.Release|Any CPU.Build.0 = Release|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD}.Release|Any CPU.Build.0 = Release|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5512A359-80E8-440C-B652-7C96F614DD9E}.Release|Any CPU.Build.0 = Release|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1}.Release|Any CPU.Build.0 = Release|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EC7970DC-A656-46A7-9873-A730FE72B213}.Release|Any CPU.Build.0 = Release|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94}.Release|Any CPU.Build.0 = Release|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E9AD81CA-D992-4F74-BD23-680CF98BE262}.Release|Any CPU.Build.0 = Release|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10}.Release|Any CPU.Build.0 = Release|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1206B9FC-0177-4061-A06E-F82B2CC01ACE}.Release|Any CPU.Build.0 = Release|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0}.Release|Any CPU.Build.0 = Release|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701}.Release|Any CPU.Build.0 = Release|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33CBF722-B166-4B68-9CB3-1293F5C78EF5}.Release|Any CPU.Build.0 = Release|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4CEFE059-B30E-4121-AA12-10EC72709758}.Release|Any CPU.Build.0 = Release|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418}.Release|Any CPU.Build.0 = Release|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4059233C-C651-4DA2-A1BC-26196362062A}.Release|Any CPU.Build.0 = Release|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {347413DD-1B30-46B5-87A0-828A11FAA87D}.Release|Any CPU.Build.0 = Release|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {13FCEB03-E300-4CE2-A789-78D9F41C903E}.Release|Any CPU.Build.0 = Release|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF}.Release|Any CPU.Build.0 = Release|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE}.Release|Any CPU.Build.0 = Release|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7433B116-806E-4500-8FF8-6143C4140BFD}.Release|Any CPU.Build.0 = Release|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.PostgreSQL|Any CPU.ActiveCfg = PostgreSQL|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.PostgreSQL|Any CPU.Build.0 = PostgreSQL|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C01C5C9-F762-4455-AD66-810BEFEE67B5}.Release|Any CPU.Build.0 = Release|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.PostgreSQL|Any CPU.ActiveCfg = Debug|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.PostgreSQL|Any CPU.Build.0 = Debug|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEB4B926-4D9F-4410-B49D-BF87F91399C2}.Release|Any CPU.Build.0 = Release|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.Debug|Any CPU.Build.0 = Debug|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.PostgreSQL|Any CPU.ActiveCfg = Debug|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.PostgreSQL|Any CPU.Build.0 = Debug|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.Release|Any CPU.ActiveCfg = Release|Any CPU - {920C78AF-E768-486B-8F3F-F36552791366}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {086BE5BE-8594-4DA7-8819-935FEF76DABD} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {5A87E9DD-3340-44DC-9564-4D8832A0228E} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {E9BE3C65-2AB2-4CE8-8EB9-5C91B329ADB4} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {E9AEC9D6-1FE7-4B00-BAC5-2C3D4B63CCA2} = {E2E7A062-0ABB-41B4-8220-60228446D2C2} - {304D06E6-41EC-4DCB-AEAE-DBEEC75F9ADC} = {E2E7A062-0ABB-41B4-8220-60228446D2C2} - {492710E6-EEF5-4390-A474-8FB2412ECBE5} = {3A0784A6-AFBF-406F-B79E-9505EB100445} - {CCF1EB86-29BD-4531-BB27-C9111CC67570} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414} - {7947D559-4288-486B-8FB3-D957CC7EDD32} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {A4195E41-3919-4C3E-8768-7F277B583D16} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {60083380-062C-4914-9E4E-5AE6637CCC3F} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {9C6E9EE2-5C83-4D96-A7B7-32798FEF2845} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {34C1E979-65B9-46F5-B7BA-60F227EBA093} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} - {80A56461-0ACC-4069-B571-87DCA064B2EF} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} - {568D2C50-1C31-4C31-89A2-C608FA93C6FD} = {3A0784A6-AFBF-406F-B79E-9505EB100445} - {12451B83-18DE-4E93-B98C-509477D53D5E} = {3A0784A6-AFBF-406F-B79E-9505EB100445} - {AAD0B6A7-847A-4537-A300-50E37F4B70CC} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C} - {5B5C2372-2EAB-4559-BBCB-0C1C9A7158DB} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C} - {2A0C5EF1-CB21-4656-8C32-B5673F6B82D2} = {EFFAF456-50C1-42C9-836E-E95E7A38D52C} - {3021DD8B-EA8F-4A88-BC2C-1BBEDC6255FE} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {B31CEE79-45F6-4BB9-9EEB-08843C324B37} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {22C61434-D29A-4376-AD56-F5089F3E617A} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {865D5508-63CD-4D44-9F5B-AE5CD4A43D08} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {ECAA4B82-A240-4747-888C-FACD8634D389} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {8AF8FD6B-634F-41FA-B421-A4ACFD159FE0} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414} - {7F18BCA5-35BD-41FB-8EFF-801B56E5E414} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {E2E7A062-0ABB-41B4-8220-60228446D2C2} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {EFFAF456-50C1-42C9-836E-E95E7A38D52C} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {B91F26C5-B148-4094-B5F1-71E5F945DBED} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {3B455AA7-B165-4EA0-8870-DB8DA5C76FC5} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} - {99F8F254-A76E-43BB-8048-CC17EE1C8527} = {0D2D7A10-CBA5-4798-BFC7-EB05D1E6B94C} - {38E21687-5F19-42C9-9D11-4B1D2EF64EDB} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {15FC0C39-A604-491F-91F6-BD44167FC5F6} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {9E59B1DB-E0D5-485D-BDA0-B6C31E1358A8} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {16942653-B746-4917-B3BF-464C99F8832F} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {D0717513-2CEE-4AD5-A1DA-A08EA5DE6DD6} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {A7A28D6C-6EDB-4615-8899-7DE1D435B750} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {17A8455F-D413-4664-AEFA-1ECAE9ED4B19} = {7F18BCA5-35BD-41FB-8EFF-801B56E5E414} - {3BAA3D38-96C2-4C4C-B790-AE2997BFDE25} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {2E35CB93-2E9C-4EE1-845F-72A40271648E} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {8D2AD50B-DD4B-48A2-88EC-0E8E8236D883} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {8FB74B18-CA5C-4DC3-8DFA-600133A05712} = {8D2AD50B-DD4B-48A2-88EC-0E8E8236D883} - {3DBF0975-B09D-49CA-9AF8-69175EDB9D52} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {93DD5A05-B67A-4E11-BB56-F6B4E7F1489C} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {221725FF-6C01-4F41-9F29-AC04C7D52611} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {1B494EA1-28CF-4A61-B0BE-70BBA425C316} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {7F767ACF-754A-4EBC-8936-3C1402B6EF82} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {E73A0F8B-2B4B-4CED-82A4-1EE5E0B89744} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {8CC72F4E-F134-4A43-9037-5D4D1F29B68A} = {E73A0F8B-2B4B-4CED-82A4-1EE5E0B89744} - {94FEA59E-3B6D-41A0-9E44-BA5D6477244F} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {C72E0407-06FE-4CAA-86E5-30FF216A7B82} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {E74FF671-6E5E-430C-9211-ED910634DDBE} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {879791A3-BD69-42E4-A3BC-9878EFAADDD1} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {C8891F1A-E6E5-448A-B527-EBFA44D20808} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {5133D83C-9B23-491C-8780-3F9BBDBD0351} = {C8891F1A-E6E5-448A-B527-EBFA44D20808} - {B8E5026B-188F-422F-A1EA-502C4A394585} = {C8891F1A-E6E5-448A-B527-EBFA44D20808} - {E861BE01-689D-4637-A5DC-E78E234F83FB} = {C8891F1A-E6E5-448A-B527-EBFA44D20808} - {CF253F0A-3A45-40EE-875F-0E57C8968C48} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {EF03A0A7-A93E-4DEF-A33E-F5A82E995FBF} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {9403FC1F-9677-489F-A03A-0B456153EE86} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {26E87199-F0AD-4B30-B0E4-080B12E6F8FC} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {8968EDAF-9F5C-4786-AF2A-D3928B70C3EC} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {CF30221B-CA7A-42CD-B91A-B7224AB2F38B} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {191BB108-546E-4E70-978E-D6A8149C319C} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {DEB98AD7-9630-4F32-89E6-C1A118D1D18C} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {00F1D30E-A6F6-464F-A80B-D423CFAA79A3} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {358A4FB1-F5DF-433C-9DA7-D27401155AD7} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {2584D823-53A7-4184-8295-719A41E5B440} = {358A4FB1-F5DF-433C-9DA7-D27401155AD7} - {6271EBC0-78F2-4E4F-A646-BBD15BCB0F84} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {C1A91534-E84F-4A98-9A78-135988030646} = {6271EBC0-78F2-4E4F-A646-BBD15BCB0F84} - {0CC508D7-480C-4409-842A-A6C10E11ACFD} = {6271EBC0-78F2-4E4F-A646-BBD15BCB0F84} - {F8330A1E-6CC3-4E90-8B5C-DCD8FA00CF5C} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {23F4260D-87C1-4AA6-A302-0A8A76D53BA1} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {CE7E525F-8628-4076-8A2E-B615B944D140} = {23F4260D-87C1-4AA6-A302-0A8A76D53BA1} - {CD556F2A-A96B-43A2-8BB3-6C0EBA27EB02} = {23F4260D-87C1-4AA6-A302-0A8A76D53BA1} - {CCB4AE25-7059-4CA0-A3AB-CBB863A3F672} = {23F4260D-87C1-4AA6-A302-0A8A76D53BA1} - {3993A315-B250-4C5D-98C7-90FD06841B66} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {A0910407-CE69-4DC8-9721-F4324C22EEA8} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {519BF5DA-30E4-40CF-829A-93F526E2AED8} = {A0910407-CE69-4DC8-9721-F4324C22EEA8} - {E16CCB14-E629-48E6-9603-53BBFF185318} = {A0910407-CE69-4DC8-9721-F4324C22EEA8} - {FBE7D8CB-1D99-4342-A953-B9AB46E0B14D} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {2F556889-006C-4A9C-8CA3-E31200C06FC9} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {73C9A7E7-846D-49E2-B223-E705D6C48BE7} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {328B0863-23BE-43FD-98DD-FF0C92D5BEF0} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {F55B987D-1DFF-4EB0-9949-8A7136A7B689} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {D72748AF-2CC8-4B5B-9710-ECDE5D812D7F} = {F55B987D-1DFF-4EB0-9949-8A7136A7B689} - {BD4165DB-F8A4-4715-A05A-CC08F6A18D67} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {AE5E6DE8-FC02-4633-BA49-C4B8ABADB502} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {31AED9ED-29BD-4F2F-8D3A-F00CBB9FC73C} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {8C688427-DD35-4F0B-86DA-6F536D3852D5} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {2C8A6B4C-D6B2-44FE-9EF5-EC7480D2A6B2} = {8C688427-DD35-4F0B-86DA-6F536D3852D5} - {3CE350AF-5574-46EC-8120-8542350AED20} = {8C688427-DD35-4F0B-86DA-6F536D3852D5} - {FE372F22-80A2-4859-9330-949C27CA94ED} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {33007EF7-BC1D-4B32-ACDA-6B9117200FAD} = {FE372F22-80A2-4859-9330-949C27CA94ED} - {B9592989-9F76-413C-8612-96E8C0CFA041} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {F7878090-7FD6-4A2E-8D61-CAA0997880D7} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {7EDBCC52-3089-49F6-A56A-650850C9797E} = {F7878090-7FD6-4A2E-8D61-CAA0997880D7} - {FF518E10-C9AB-440C-8E8D-9CFF67A926AC} = {3A0784A6-AFBF-406F-B79E-9505EB100445} - {49E0B90B-8635-43D0-B0AB-9D484CAE68B5} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {3FF4CEA0-1555-4D62-AA81-B3B599253F8D} = {38E21687-5F19-42C9-9D11-4B1D2EF64EDB} - {BD97C98B-0B4B-443D-AB29-145A344F46D3} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {AFE75D2B-8853-488B-B5D5-277B58C5DBB2} = {BD97C98B-0B4B-443D-AB29-145A344F46D3} - {3971AD93-BF97-4E05-972D-CB5EB9F6CB88} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {D9339CBB-45B9-4701-B2AC-2A75FF20D77B} = {3971AD93-BF97-4E05-972D-CB5EB9F6CB88} - {474AA48F-65F9-436B-A0B1-1E95BD16CA8D} = {3971AD93-BF97-4E05-972D-CB5EB9F6CB88} - {C71F6273-BCDE-4A63-A0CF-EAFD1D924DA0} = {7FDFB22F-1BFF-4E05-9427-78B7A8461D50} - {0F5A2591-CE08-4184-A5F3-89F6FB3B2B10} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {5515C7CA-B512-4E36-A202-49A0158A0E74} = {0F5A2591-CE08-4184-A5F3-89F6FB3B2B10} - {EBA67EAD-4958-46E3-9E0C-8186394D083F} = {0F5A2591-CE08-4184-A5F3-89F6FB3B2B10} - {25891EE2-3166-420F-8408-E458030C4643} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {F051C960-AA61-4283-A088-611C0B96C953} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {1435711B-D796-42AB-B567-0BB23F02EE08} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {7862CE70-76EF-4228-A703-C2E2A9704D14} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {1A072FF5-1A7E-4F78-B145-1AB873AEB8FF} = {7862CE70-76EF-4228-A703-C2E2A9704D14} - {88412E3D-21C8-4FF1-8EB3-84CB74094336} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {30FA01ED-921A-4E7D-9E83-6719538FB866} = {7862CE70-76EF-4228-A703-C2E2A9704D14} - {E6FDAD7B-4A7F-4CEB-9891-F8FC4E556C36} = {7862CE70-76EF-4228-A703-C2E2A9704D14} - {4CBB4A0C-6D23-44DD-BAF4-49D69ED35839} = {0F5A2591-CE08-4184-A5F3-89F6FB3B2B10} - {C2801414-550F-4A25-AD8D-68AC508211DC} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {868A1718-4970-48D2-A256-08EF468302D8} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {B78E53AC-6BB8-402D-90CF-BEF1BD9558EB} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {AA039B4E-CE12-43AC-8340-3D52463E971E} = {B91F26C5-B148-4094-B5F1-71E5F945DBED} - {2C5C57FB-70F5-4C20-92FC-39ACD260CEE3} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {A1C75C3E-67D1-4BCE-89BF-44A735909BD5} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {60143C9C-E539-498A-9DBE-B95E6A8301A5} = {A1C75C3E-67D1-4BCE-89BF-44A735909BD5} - {641DF0BA-0E79-441D-B328-FDA288A35CDE} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {2020EA8D-F276-498D-92D1-94D1E25F8E1A} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {2A3DF8B2-4760-41C4-9337-44FEE29B17CD} = {A1C75C3E-67D1-4BCE-89BF-44A735909BD5} - {3975D028-3672-4D23-BF77-B7F4A445D44E} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {5512A359-80E8-440C-B652-7C96F614DD9E} = {3975D028-3672-4D23-BF77-B7F4A445D44E} - {6A23EE81-0CA7-4CA7-859D-6ADB669DF0E1} = {3975D028-3672-4D23-BF77-B7F4A445D44E} - {EC7970DC-A656-46A7-9873-A730FE72B213} = {3975D028-3672-4D23-BF77-B7F4A445D44E} - {F515E8FA-449F-4D54-98A7-0F7DF1AA3C94} = {3975D028-3672-4D23-BF77-B7F4A445D44E} - {E9AD81CA-D992-4F74-BD23-680CF98BE262} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {2E29FBF7-CECB-4DF9-9E02-5AFB704DDD10} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - {1206B9FC-0177-4061-A06E-F82B2CC01ACE} = {E73A0F8B-2B4B-4CED-82A4-1EE5E0B89744} - {809C86E9-0C70-41E4-B26D-D9AFF34F03D0} = {E73A0F8B-2B4B-4CED-82A4-1EE5E0B89744} - {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} = {02EA4E78-5891-43BC-944F-3E52FEE032E4} - {B6A5E070-3A2A-4F53-8391-0CA0C60B7701} = {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} - {33CBF722-B166-4B68-9CB3-1293F5C78EF5} = {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} - {4CEFE059-B30E-4121-AA12-10EC72709758} = {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} - {C9EC8CCF-5CA7-4332-B7B7-FF9B094FA418} = {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} - {4059233C-C651-4DA2-A1BC-26196362062A} = {C12EEBC0-0407-4AEF-81C4-EDF5E22BB00E} - {347413DD-1B30-46B5-87A0-828A11FAA87D} = {F55B987D-1DFF-4EB0-9949-8A7136A7B689} - {13FCEB03-E300-4CE2-A789-78D9F41C903E} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {8B15AAB5-18BB-4A2E-86F1-4A2F04C9FAFF} = {F55B987D-1DFF-4EB0-9949-8A7136A7B689} - {57FCECAF-11F0-46C8-A74B-55C7AE76E8FE} = {A1C75C3E-67D1-4BCE-89BF-44A735909BD5} - {7433B116-806E-4500-8FF8-6143C4140BFD} = {7862CE70-76EF-4228-A703-C2E2A9704D14} - {2C01C5C9-F762-4455-AD66-810BEFEE67B5} = {22C61434-D29A-4376-AD56-F5089F3E617A} - {DEB4B926-4D9F-4410-B49D-BF87F91399C2} = {086BE5BE-8594-4DA7-8819-935FEF76DABD} - {920C78AF-E768-486B-8F3F-F36552791366} = {B86C21A4-73B7-471E-B73A-B4B905EC9435} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {06C707C6-02C0-411A-AD3B-2D0E13787CB8} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.Common.slnx b/aspnet-core/LINGYUN.MicroService.Common.slnx new file mode 100644 index 000000000..fe73ca31d --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.Common.slnx @@ -0,0 +1,203 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.SingleProject.sln b/aspnet-core/LINGYUN.MicroService.SingleProject.sln deleted file mode 100644 index 8a33b09cf..000000000 --- a/aspnet-core/LINGYUN.MicroService.SingleProject.sln +++ /dev/null @@ -1,2301 +0,0 @@ -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.14.36616.10 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{0B58AA48-665A-443F-A6A8-751FB9629DAF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosts", "hosts", "{B4247B78-34BC-4A3F-91A4-661F7DCD6E10}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{DE48451F-D4CB-4C9F-B300-4CA0B8ED9E1C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{37E2CAFE-0024-452E-BF81-E15F937E08EF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{99B7CBDE-A251-4738-97F0-DB1DB484BEE1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{42F31C68-B8B2-4BE0-9AD0-A7DFA6092629}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{14DC8B87-82B5-4A76-BBAB-BBD76F7C3555}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Emailing", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Emailing\LINGYUN.Abp.Notifications.Emailing.csproj", "{4995C481-7465-4A36-8416-0D0D14F64B10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.SignalR", "modules\realtime-notifications\LINGYUN.Abp.Notifications.SignalR\LINGYUN.Abp.Notifications.SignalR.csproj", "{9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{3B6F4C72-975B-44A4-9F72-A217E53E05C1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM.SignalR", "modules\realtime-message\LINGYUN.Abp.IM.SignalR\LINGYUN.Abp.IM.SignalR.csproj", "{95909DDC-66A1-410A-9AB1-CD62EA33CFA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator", "framework\common\LINGYUN.Abp.IdGenerator\LINGYUN.Abp.IdGenerator.csproj", "{1AFDF87C-220D-44EC-B5DA-99B0510AE561}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "feature", "feature", "{7F7FB560-7005-438B-8D95-4FA781B5F1F3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation", "framework\common\LINGYUN.Abp.Features.LimitValidation\LINGYUN.Abp.Features.LimitValidation.csproj", "{7F831848-A1C1-49FE-B81A-499AB6E17286}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis\LINGYUN.Abp.Features.LimitValidation.Redis.csproj", "{9C2A3557-31E4-4D06-A08E-138E31412AD4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.LimitValidation.Redis.Client", "framework\common\LINGYUN.Abp.Features.LimitValidation.Redis.Client\LINGYUN.Abp.Features.LimitValidation.Redis.Client.csproj", "{7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{8064607C-BDB9-454D-8E76-2B21023CD071}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exception", "exception", "{3E2388B0-2870-47DB-87E9-32F295E32D05}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{A3BF5605-8684-4713-885D-CC498CC37686}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{D1399D41-0273-45FA-969F-FA9C77432A06}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\realtime-notifications\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{E790A9A3-3C24-4478-A547-0FE13F7F6963}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "alibaba-cloud", "alibaba-cloud", "{192A028F-23AD-44A2-A7B2-8397FEA30B08}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun\LINGYUN.Abp.Aliyun.csproj", "{56F007F7-23A8-4F13-B45F-57D4EB35AB2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.SettingManagement", "framework\cloud-aliyun\LINGYUN.Abp.Aliyun.SettingManagement\LINGYUN.Abp.Aliyun.SettingManagement.csproj", "{7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Aliyun", "framework\common\LINGYUN.Abp.Sms.Aliyun\LINGYUN.Abp.Sms.Aliyun.csproj", "{7259B767-9528-4EF9-8F81-20344879F1CD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tencent-cloud", "tencent-cloud", "{FDE379A6-8285-4001-818A-DDEA928DE702}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Tencent\LINGYUN.Abp.Tencent.csproj", "{ED7E70B9-8FEE-48DF-9962-AD1062769342}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.QQ", "framework\cloud-tencent\LINGYUN.Abp.Tencent.QQ\LINGYUN.Abp.Tencent.QQ.csproj", "{BAD28D5B-8A14-43DF-A236-E313FD97E799}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Sms.Tencent", "framework\cloud-tencent\LINGYUN.Abp.Sms.Tencent\LINGYUN.Abp.Sms.Tencent.csproj", "{DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.Tencent", "framework\cloud-tencent\LINGYUN.Abp.BlobStoring.Tencent\LINGYUN.Abp.BlobStoring.Tencent.csproj", "{60C97165-7CAB-467A-857E-9343B239F8EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Tencent.SettingManagement", "framework\cloud-tencent\LINGYUN.Abp.Tencent.SettingManagement\LINGYUN.Abp.Tencent.SettingManagement.csproj", "{C18979C7-EBD1-437D-A877-4A97B68761A5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authentication", "authentication", "{0AD78B12-EDC5-48E2-8FA3-309E731945EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.QQ", "framework\authentication\LINGYUN.Abp.Authentication.QQ\LINGYUN.Abp.Authentication.QQ.csproj", "{DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authentication.WeChat", "framework\authentication\LINGYUN.Abp.Authentication.WeChat\LINGYUN.Abp.Authentication.WeChat.csproj", "{D2AB9E95-A074-498A-A475-2298D0F1973E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{AE5FF8DB-F3B2-4529-B9CE-7CFC98E0CC8C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{DA8FB07D-1347-4E5A-B84C-8AB955A652AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.OrganizaztionUnits", "modules\identity\LINGYUN.Abp.Identity.OrganizaztionUnits\LINGYUN.Abp.Identity.OrganizaztionUnits.csproj", "{2D66E202-B34D-4998-BD80-5411C8087695}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{C22741F9-FC56-4AE3-B543-9F15C779D345}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{4EC45855-A09A-4B77-99A8-DA00E2D702E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.EntityFrameworkCore", "framework\auditing\LINGYUN.Abp.AuditLogging.EntityFrameworkCore\LINGYUN.Abp.AuditLogging.EntityFrameworkCore.csproj", "{42439E6A-0084-48A9-9620-0B9EAB4182C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application.Contracts", "modules\auditing\LINGYUN.Abp.Auditing.Application.Contracts\LINGYUN.Abp.Auditing.Application.Contracts.csproj", "{F1290A8A-3BBE-4647-90D9-4AD537432AB5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.Application", "modules\auditing\LINGYUN.Abp.Auditing.Application\LINGYUN.Abp.Auditing.Application.csproj", "{FAF2D4A3-7A7F-4848-9817-66D164D03F0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Auditing.HttpApi", "modules\auditing\LINGYUN.Abp.Auditing.HttpApi\LINGYUN.Abp.Auditing.HttpApi.csproj", "{9E728961-7C0B-4C2B-92E4-8965B45ADB19}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "caching", "caching", "{C186173C-7725-41A6-B5E3-F46219B03C5F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Domain", "modules\caching-management\LINGYUN.Abp.CachingManagement.Domain\LINGYUN.Abp.CachingManagement.Domain.csproj", "{79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application.Contracts", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application.Contracts\LINGYUN.Abp.CachingManagement.Application.Contracts.csproj", "{45E954A6-5F29-48B3-B518-513F6837EE27}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.Application", "modules\caching-management\LINGYUN.Abp.CachingManagement.Application\LINGYUN.Abp.CachingManagement.Application.csproj", "{D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.HttpApi", "modules\caching-management\LINGYUN.Abp.CachingManagement.HttpApi\LINGYUN.Abp.CachingManagement.HttpApi.csproj", "{2DAE26C2-BB2C-49CE-B52D-D53383ADE560}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.CachingManagement.StackExchangeRedis", "modules\caching-management\LINGYUN.Abp.CachingManagement.StackExchangeRedis\LINGYUN.Abp.CachingManagement.StackExchangeRedis.csproj", "{92BC5C99-A17F-4936-BF8C-ED2AF9795D6E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dynamic-queryable", "dynamic-queryable", "{622B90DB-1665-4822-82EF-7DDAC5629834}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable", "framework\dynamic-queryable\LINGYUN.Linq.Dynamic.Queryable\LINGYUN.Linq.Dynamic.Queryable.csproj", "{0FCB18BE-6D50-4567-8CBD-80B0336D9685}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application.Contracts", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts.csproj", "{9B4C9894-D295-4D16-AC90-F98563B37722}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application\LINGYUN.Abp.Dynamic.Queryable.Application.csproj", "{E7EFE38E-1214-4D7D-A9DA-F753D613F956}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.HttpApi", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.HttpApi\LINGYUN.Abp.Dynamic.Queryable.HttpApi.csproj", "{BC3E9C3B-EA51-4CC8-AD94-7F0285239907}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa", "elsa", "{07DFEB1E-ED92-4E97-A801-FAB2D70F4F35}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa", "modules\elsa\LINGYUN.Abp.Elsa\LINGYUN.Abp.Elsa.csproj", "{33D6A170-D609-430C-B110-E1A8F3322C06}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.BlobStoring", "modules\elsa\LINGYUN.Abp.Elsa.Activities.BlobStoring\LINGYUN.Abp.Elsa.Activities.BlobStoring.csproj", "{E1758B64-3ED1-4D79-AAAB-8307BFF16C0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Emailing", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Emailing\LINGYUN.Abp.Elsa.Activities.Emailing.csproj", "{3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.IM", "modules\elsa\LINGYUN.Abp.Elsa.Activities.IM\LINGYUN.Abp.Elsa.Activities.IM.csproj", "{19CD928F-D16F-4A91-BA0C-2459F5055565}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Notifications\LINGYUN.Abp.Elsa.Activities.Notifications.csproj", "{86993E17-8793-45ED-B636-C921BB1165D7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Sms", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Sms\LINGYUN.Abp.Elsa.Activities.Sms.csproj", "{158AFAD1-39AE-4135-81EE-55F905802A8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Webhooks", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Webhooks\LINGYUN.Abp.Elsa.Activities.Webhooks.csproj", "{2BE2CFE9-26E7-4791-B9DE-109B465B701C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhooks", "webhooks", "{C326B106-8818-42FC-9A2F-C58201EE796C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities", "modules\elsa\LINGYUN.Abp.Elsa.Activities\LINGYUN.Abp.Elsa.Activities.csproj", "{BF943CF0-2732-41D3-BFE3-9B843564D807}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore\LINGYUN.Abp.Elsa.EntityFrameworkCore.csproj", "{B93528E2-55EA-4847-950D-8B95B1CC2909}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj", "{2BD4EF1A-F6F5-4199-9BD2-4B07319852DB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Server", "modules\elsa\LINGYUN.Abp.Elsa.Server\LINGYUN.Abp.Elsa.Server.csproj", "{BCF85E69-4D97-4DD3-8526-B33C76BD17CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks", "modules\webhooks\LINGYUN.Abp.Webhooks\LINGYUN.Abp.Webhooks.csproj", "{2B1B759E-670A-4837-854A-4748C67BB15B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Core", "modules\webhooks\LINGYUN.Abp.Webhooks.Core\LINGYUN.Abp.Webhooks.Core.csproj", "{9ACB83F6-C911-4473-973D-A3BECFB5F1E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.EventBus", "modules\webhooks\LINGYUN.Abp.Webhooks.EventBus\LINGYUN.Abp.Webhooks.EventBus.csproj", "{97064B96-B5AC-461D-BBBF-97A864F373E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Identity", "modules\webhooks\LINGYUN.Abp.Webhooks.Identity\LINGYUN.Abp.Webhooks.Identity.csproj", "{617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Saas", "modules\webhooks\LINGYUN.Abp.Webhooks.Saas\LINGYUN.Abp.Webhooks.Saas.csproj", "{DB4498D8-E45B-4A5A-9BF2-830039B2D38D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Domain.Shared", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain.Shared\LINGYUN.Abp.WebhooksManagement.Domain.Shared.csproj", "{412BAB54-282E-4A01-AF72-E76F3AF31AE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Domain", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain\LINGYUN.Abp.WebhooksManagement.Domain.csproj", "{EFD48C85-7EA6-4553-B8A3-15A3867C8EC0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Application.Contracts", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application.Contracts\LINGYUN.Abp.WebhooksManagement.Application.Contracts.csproj", "{21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Application", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application\LINGYUN.Abp.WebhooksManagement.Application.csproj", "{7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore.csproj", "{DD0EBD4F-0BE9-46A1-91E0-6B66A814664C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.HttpApi", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.HttpApi\LINGYUN.Abp.WebhooksManagement.HttpApi.csproj", "{DA053CAE-EBA4-4532-93B5-3347589CB174}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflow", "workflow", "{8F690C33-40BF-4EF8-A96A-D7FB56F163AC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tencent-wechat", "tencent-wechat", "{91867618-0D86-4410-91C6-B1166A9ACDF9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{76810110-6683-4777-9157-8030F9205FBF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{80DDA32B-2BDA-4704-9458-6D680B08B74C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{FB07F20F-1BC7-4711-9357-A4B7EA0A2C51}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.WeChat", "framework\wechat\LINGYUN.Abp.Identity.WeChat\LINGYUN.Abp.Identity.WeChat.csproj", "{ED7AADAF-72D8-4C04-96CE-B46B21C9C343}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.MiniProgram", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.MiniProgram\LINGYUN.Abp.Notifications.WeChat.MiniProgram.csproj", "{6518F1B5-63EA-46A2-87ED-FD90366594EC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "text-templating", "text-templating", "{C46E03DE-FFFA-4659-97AE-77BDA46C3FCA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain.Shared", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain.Shared\LINGYUN.Abp.TextTemplating.Domain.Shared.csproj", "{AB79F7C4-9AE1-4921-B18A-F64074B1DC69}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain\LINGYUN.Abp.TextTemplating.Domain.csproj", "{DCF463DE-50CA-4585-BA9F-83F7101B5ED7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application.Contracts", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application.Contracts\LINGYUN.Abp.TextTemplating.Application.Contracts.csproj", "{A2E248DB-B2DD-4916-82A6-5D296C1298B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Application", "modules\text-templating\LINGYUN.Abp.TextTemplating.Application\LINGYUN.Abp.TextTemplating.Application.csproj", "{293C7A2B-46D2-49B6-A8C6-294500ED5AE5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.EntityFrameworkCore", "modules\text-templating\LINGYUN.Abp.TextTemplating.EntityFrameworkCore\LINGYUN.Abp.TextTemplating.EntityFrameworkCore.csproj", "{21691099-AF37-4706-84AE-C19C72DC09B6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.HttpApi", "modules\text-templating\LINGYUN.Abp.TextTemplating.HttpApi\LINGYUN.Abp.TextTemplating.HttpApi.csproj", "{C31A17E0-AE56-419C-A6D1-3FCBB68005E2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{D9C65C9D-8591-46DA-A3EE-419393E607AB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{974D842A-9739-40E4-96E8-039552E28D8B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks", "modules\task-management\LINGYUN.Abp.BackgroundTasks\LINGYUN.Abp.BackgroundTasks.csproj", "{7450F9AF-3C5D-4137-AEC7-2AA38E8006E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Activities", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Activities\LINGYUN.Abp.BackgroundTasks.Activities.csproj", "{F3064272-5A6F-4CB9-B79F-8D37A2392CC1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.DistributedLocking", "modules\task-management\LINGYUN.Abp.BackgroundTasks.DistributedLocking\LINGYUN.Abp.BackgroundTasks.DistributedLocking.csproj", "{1DD17D3E-F8EC-44AA-8437-3AF541CD3988}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.EventBus", "modules\task-management\LINGYUN.Abp.BackgroundTasks.EventBus\LINGYUN.Abp.BackgroundTasks.EventBus.csproj", "{F42FAF67-D10F-487A-A74C-E6D8EA90831C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.ExceptionHandling", "modules\task-management\LINGYUN.Abp.BackgroundTasks.ExceptionHandling\LINGYUN.Abp.BackgroundTasks.ExceptionHandling.csproj", "{81B74E08-06CD-4134-A02D-B4B837945E2B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Jobs", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Jobs\LINGYUN.Abp.BackgroundTasks.Jobs.csproj", "{78635E6D-2C35-437C-96CD-29DAEAFE0076}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Notifications", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Notifications\LINGYUN.Abp.BackgroundTasks.Notifications.csproj", "{F8CBD522-6668-4A5F-B62D-9E37E7DC1279}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Quartz", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Quartz\LINGYUN.Abp.BackgroundTasks.Quartz.csproj", "{33FC6389-3931-4BD2-A619-36C4A8F5C7B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain.Shared", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain.Shared\LINGYUN.Abp.TaskManagement.Domain.Shared.csproj", "{58A4954C-4901-4172-BEE7-5584ABB0DF45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain\LINGYUN.Abp.TaskManagement.Domain.csproj", "{D4BC55C7-1991-4866-A7BA-66653DACF945}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "background-tasks", "background-tasks", "{91EE5D5B-B6DF-43F1-BC09-1A982719A34B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application.Contracts", "modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj", "{C6EDE646-6A5E-4495-8A30-88D1EAE9A42E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application", "modules\task-management\LINGYUN.Abp.TaskManagement.Application\LINGYUN.Abp.TaskManagement.Application.csproj", "{CF1F1193-FECE-4E98-A4FC-643A86F30429}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.EntityFrameworkCore", "modules\task-management\LINGYUN.Abp.TaskManagement.EntityFrameworkCore\LINGYUN.Abp.TaskManagement.EntityFrameworkCore.csproj", "{46C57140-EE02-4785-9777-F2264EC88135}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi\LINGYUN.Abp.TaskManagement.HttpApi.csproj", "{3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{3AD66E47-B667-40D1-AE61-F5EC186241F7}" - ProjectSection(SolutionItems) = preProject - modules\oss-management\README.md = modules\oss-management\README.md - EndProjectSection -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{AD3E63A3-3422-4A1A-AC89-B20786A5323E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain\LINGYUN.Abp.OssManagement.Domain.csproj", "{CA2975D9-5477-4281-8D84-F0909F22DFF3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.FileSystem", "modules\oss-management\LINGYUN.Abp.OssManagement.FileSystem\LINGYUN.Abp.OssManagement.FileSystem.csproj", "{90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi\LINGYUN.Abp.OssManagement.HttpApi.csproj", "{34C9609F-556B-44D7-B3DE-5637FEB0BFEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{A69E6742-39A6-4C0D-A098-E16A653331AC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application", "modules\oss-management\LINGYUN.Abp.OssManagement.Application\LINGYUN.Abp.OssManagement.Application.csproj", "{6AC4C18F-2BB5-47F9-99F5-5585E1D22111}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.SettingManagement", "modules\oss-management\LINGYUN.Abp.OssManagement.SettingManagement\LINGYUN.Abp.OssManagement.SettingManagement.csproj", "{4D738A46-2B08-4A88-8787-668A4AD5AE5F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "open-api", "open-api", "{3A74FBEF-AE1F-420D-9B08-E09E03C740D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi", "framework\open-api\LINGYUN.Abp.OpenApi\LINGYUN.Abp.OpenApi.csproj", "{0B9E97DE-0265-4192-9FAF-B5AF65AC6611}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenApi.Authorization", "framework\open-api\LINGYUN.Abp.OpenApi.Authorization\LINGYUN.Abp.OpenApi.Authorization.csproj", "{C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "notifications", "notifications", "{96BA4536-5E1E-476D-9368-BAF6FC939D25}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain.Shared", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain.Shared\LINGYUN.Abp.Notifications.Domain.Shared.csproj", "{EA56194E-B0EF-42B1-BC35-9A677D7D66BB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Domain", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Domain\LINGYUN.Abp.Notifications.Domain.csproj", "{56C00F97-6769-44B2-8004-341D5286E31F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application.Contracts", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application.Contracts\LINGYUN.Abp.Notifications.Application.Contracts.csproj", "{DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Application", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Application\LINGYUN.Abp.Notifications.Application.csproj", "{6C774F10-5FAC-4177-9BFA-28486747DF3D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.EntityFrameworkCore", "modules\realtime-notifications\LINGYUN.Abp.Notifications.EntityFrameworkCore\LINGYUN.Abp.Notifications.EntityFrameworkCore.csproj", "{91BD29B8-FD39-4429-A8FF-C5A1E511C632}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.HttpApi", "modules\realtime-notifications\LINGYUN.Abp.Notifications.HttpApi\LINGYUN.Abp.Notifications.HttpApi.csproj", "{DB29E904-C164-46B3-A12C-3A908FCA6DB9}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "messages", "messages", "{E17C1E4A-9BD2-42DC-99E4-B6E104D3789A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain.Shared", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain.Shared\LINGYUN.Abp.MessageService.Domain.Shared.csproj", "{6F5CD33F-ACD9-4BF3-99DE-33A24116A672}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Domain", "modules\realtime-message\LINGYUN.Abp.MessageService.Domain\LINGYUN.Abp.MessageService.Domain.csproj", "{1EA3971F-E854-4198-AC8D-BC3C4F804B25}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application.Contracts", "modules\realtime-message\LINGYUN.Abp.MessageService.Application.Contracts\LINGYUN.Abp.MessageService.Application.Contracts.csproj", "{A5CA092D-E294-4BF6-92AF-CCF136A643D1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.Application", "modules\realtime-message\LINGYUN.Abp.MessageService.Application\LINGYUN.Abp.MessageService.Application.csproj", "{9CDC9B6C-C69E-483F-B881-5D065FA064C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.EntityFrameworkCore", "modules\realtime-message\LINGYUN.Abp.MessageService.EntityFrameworkCore\LINGYUN.Abp.MessageService.EntityFrameworkCore.csproj", "{A74A9B50-0E40-44AD-9360-5BF96696B405}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MessageService.HttpApi", "modules\realtime-message\LINGYUN.Abp.MessageService.HttpApi\LINGYUN.Abp.MessageService.HttpApi.csproj", "{A243383E-7025-4893-9611-EE75DA055301}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{936C5D74-B90F-4932-87C3-C1A0A29083B9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{86ED8028-5533-4B5D-8594-C09929F2A553}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{C056C11F-EC74-4720-ACEA-D4C57DC4736F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{A09032AD-D895-4D83-8D3D-67FF3285F7A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{59A3A2B8-7992-4321-A481-8C2CD08D0835}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{F9D10E1C-38DC-423D-8B79-BE4673C75B50}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application.Contracts", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application.Contracts\LINGYUN.Abp.LocalizationManagement.Application.Contracts.csproj", "{53479279-0E9C-4921-BEB1-46FDB553C8E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Application", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Application\LINGYUN.Abp.LocalizationManagement.Application.csproj", "{8472D376-D2DB-40C3-AAF9-9ACDF1731919}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{1D7770AA-1669-45CE-88D9-3009C6A48AEE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.HttpApi", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.HttpApi\LINGYUN.Abp.LocalizationManagement.HttpApi.csproj", "{F4ED4FC9-74D5-4379-9787-1F7756B56201}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging", "framework\logging\LINGYUN.Abp.Logging\LINGYUN.Abp.Logging.csproj", "{F87CA546-1ED2-409A-AD87-62E133BD3EF9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{2BB68CBB-2220-466B-B24E-6916819DFB79}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{ACEFA4C4-4CA8-4358-9B75-3806DF228517}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{D94D6AFE-20BD-4F21-8708-03F5E34F49FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain.Shared", "modules\identity\LINGYUN.Abp.Identity.Domain.Shared\LINGYUN.Abp.Identity.Domain.Shared.csproj", "{AF2F208F-43D6-4296-9826-677681BEC6D4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Domain", "modules\identity\LINGYUN.Abp.Identity.Domain\LINGYUN.Abp.Identity.Domain.csproj", "{B3F2E786-B28D-444D-9BD9-DD16CBFD38C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application.Contracts", "modules\identity\LINGYUN.Abp.Identity.Application.Contracts\LINGYUN.Abp.Identity.Application.Contracts.csproj", "{7B26E45A-99B1-47EA-9015-7DD78CAFC423}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Application", "modules\identity\LINGYUN.Abp.Identity.Application\LINGYUN.Abp.Identity.Application.csproj", "{F826B05A-2736-4361-ADE5-04B1CF171ED4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.EntityFrameworkCore", "modules\identity\LINGYUN.Abp.Identity.EntityFrameworkCore\LINGYUN.Abp.Identity.EntityFrameworkCore.csproj", "{CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.HttpApi", "modules\identity\LINGYUN.Abp.Identity.HttpApi\LINGYUN.Abp.Identity.HttpApi.csproj", "{0E84E1E4-82F8-412B-94F2-E06FF1320B1D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{A3B6DFC3-5D27-496E-9AD6-C1035213F1DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Domain", "modules\identityServer\LINGYUN.Abp.IdentityServer.Domain\LINGYUN.Abp.IdentityServer.Domain.csproj", "{C9202B23-45E9-4167-BFAC-89651AF554EB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application.Contracts", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application.Contracts\LINGYUN.Abp.IdentityServer.Application.Contracts.csproj", "{16666C1F-09C1-4829-9AFC-77FB22439A59}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Application", "modules\identityServer\LINGYUN.Abp.IdentityServer.Application\LINGYUN.Abp.IdentityServer.Application.csproj", "{152DA047-C1BF-4028-B3E7-EF7CEE01AC4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.EntityFrameworkCore", "modules\identityServer\LINGYUN.Abp.IdentityServer.EntityFrameworkCore\LINGYUN.Abp.IdentityServer.EntityFrameworkCore.csproj", "{1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.HttpApi", "modules\identityServer\LINGYUN.Abp.IdentityServer.HttpApi\LINGYUN.Abp.IdentityServer.HttpApi.csproj", "{DAFCBF4F-8174-4934-929E-374FBDCE854D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.LinkUser", "modules\identityServer\LINGYUN.Abp.IdentityServer.LinkUser\LINGYUN.Abp.IdentityServer.LinkUser.csproj", "{CC05C0C9-A0C6-4DFC-863A-6E2778E627EA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{0DF5AD76-AEEA-4052-A6CA-A44C24879F11}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{ECE6E6D7-A4F6-4F50-BC21-AE2EB14A3129}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{1C3BCC38-D583-402F-B922-5562F19EA12C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{00A6598E-8913-47C4-97F7-0E784EA9D55F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{A8A8A180-C40F-43C7-B6B2-622344CE276B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application.Contracts", "modules\saas\LINGYUN.Abp.Saas.Application.Contracts\LINGYUN.Abp.Saas.Application.Contracts.csproj", "{232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application", "modules\saas\LINGYUN.Abp.Saas.Application\LINGYUN.Abp.Saas.Application.csproj", "{5960FE7B-EC00-4C8D-A522-8FFEC184694D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.HttpApi", "modules\saas\LINGYUN.Abp.Saas.HttpApi\LINGYUN.Abp.Saas.HttpApi.csproj", "{6A79337A-879F-4A9F-8328-5578E40177B5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{65CF5AD9-7D2A-4E31-B695-390B2D4A70D0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application.Contracts", "framework\settings\LINGYUN.Abp.SettingManagement.Application.Contracts\LINGYUN.Abp.SettingManagement.Application.Contracts.csproj", "{233C2407-3ED3-4322-B28D-0F93CF4C6E33}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.Application", "modules\settings\LINGYUN.Abp.SettingManagement.Application\LINGYUN.Abp.SettingManagement.Application.csproj", "{118D91CE-091B-4C65-8979-2F5363C56CDC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.SettingManagement.HttpApi", "modules\settings\LINGYUN.Abp.SettingManagement.HttpApi\LINGYUN.Abp.SettingManagement.HttpApi.csproj", "{3EF74657-9EBC-46FD-B2CA-40959D0EE692}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Domain", "modules\platform\LINGYUN.Platform.Domain\LINGYUN.Platform.Domain.csproj", "{A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{A788317B-1649-4D26-AB6C-6AA5B35767DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Application", "modules\platform\LINGYUN.Platform.Application\LINGYUN.Platform.Application.csproj", "{BD990314-682C-4BF1-A1B3-A0A0E37AAEB2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin\LINGYUN.Abp.UI.Navigation.VueVbenAdmin.csproj", "{C027362E-9B72-4058-91DF-D7F0FDD162AA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.HttpApi", "modules\platform\LINGYUN.Platform.HttpApi\LINGYUN.Platform.HttpApi.csproj", "{4EFA5940-881E-4A32-BF8C-D15FF74DFB0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.EntityFrameworkCore", "modules\platform\LINGYUN.Platform.EntityFrameworkCore\LINGYUN.Platform.EntityFrameworkCore.csproj", "{0E0683C3-5169-4965-A886-D960811E1807}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Settings.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Settings.VueVbenAdmin\LINGYUN.Platform.Settings.VueVbenAdmin.csproj", "{8011A4C4-F08C-463D-A376-F33A7F780F57}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Platform.Theme.VueVbenAdmin", "modules\platform\LINGYUN.Platform.Theme.VueVbenAdmin\LINGYUN.Platform.Theme.VueVbenAdmin.csproj", "{78767BC5-FE68-4919-BC1B-DE7FF71F294B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.UI.Navigation", "framework\navigation\LINGYUN.Abp.UI.Navigation\LINGYUN.Abp.UI.Navigation.csproj", "{8F29FD0D-D84C-4374-9BE1-02D7FA99E10E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "openIddict", "openIddict", "{7C714185-D3D9-4D94-B5CB-D857A0091F04}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application.Contracts", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application.Contracts\LINGYUN.Abp.OpenIddict.Application.Contracts.csproj", "{9697AB9A-2ACA-42E5-877E-EEF371166898}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Application", "modules\openIddict\LINGYUN.Abp.OpenIddict.Application\LINGYUN.Abp.OpenIddict.Application.csproj", "{76A4D1FD-479A-4C57-96E0-BBFCCBADB683}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.HttpApi", "modules\openIddict\LINGYUN.Abp.OpenIddict.HttpApi\LINGYUN.Abp.OpenIddict.HttpApi.csproj", "{E4C02147-34FA-43D1-B03C-00D539CF18BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.LinkUser", "modules\openIddict\LINGYUN.Abp.OpenIddict.LinkUser\LINGYUN.Abp.OpenIddict.LinkUser.csproj", "{AABB5ABC-790E-48D1-B654-72143227FA64}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Sms", "modules\openIddict\LINGYUN.Abp.OpenIddict.Sms\LINGYUN.Abp.OpenIddict.Sms.csproj", "{CA5E2785-511D-4A14-8883-2544C869B2DF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat\LINGYUN.Abp.OpenIddict.WeChat.csproj", "{AB897095-EA92-4AD9-829C-66FEE1878A5D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wrapper", "wrapper", "{40A9F0DB-66AA-42A8-8670-9DD6DA992103}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{1FA05CCA-0584-4320-B278-D5AA1234BA02}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{7B6A98B3-90C1-49F2-8A17-C70FED500627}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "account", "account", "{4F837B81-EA7D-472A-8482-3D5A730DF810}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application.Contracts", "modules\account\LINGYUN.Abp.Account.Application.Contracts\LINGYUN.Abp.Account.Application.Contracts.csproj", "{1F404E43-FA13-485D-B922-7D8848EBCE0F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.Application", "modules\account\LINGYUN.Abp.Account.Application\LINGYUN.Abp.Account.Application.csproj", "{2230E355-50F7-424F-929F-532B0A5DABE0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Account.HttpApi", "modules\account\LINGYUN.Abp.Account.HttpApi\LINGYUN.Abp.Account.HttpApi.csproj", "{FBCDC571-F747-46AB-AFCB-38D191DCFFB6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.Applications.Single", "services\LY.MicroService.Applications.Single\LY.MicroService.Applications.Single.csproj", "{83D2F8F2-82C7-4919-9B65-D0FBF0B5324C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{D1A85853-3504-45A8-A745-5091E9240682}" - ProjectSection(SolutionItems) = preProject - ..\common.props = ..\common.props - ..\common.secrets.props = ..\common.secrets.props - ..\configureawait.props = ..\configureawait.props - ..\Directory.Build.props = ..\Directory.Build.props - ..\Directory.Packages.props = ..\Directory.Packages.props - ..\NuGet.Config = ..\NuGet.Config - ..\README.en.md = ..\README.en.md - ..\README.md = ..\README.md - ..\docs\startup-aio-readme.md = ..\docs\startup-aio-readme.md - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{FD9F5933-FDE5-4504-99BF-9050E0435C6D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{CAEF3248-527D-48B7-9C98-929AC573C381}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{209E7129-4B39-4768-A0D6-797F796E4FCE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{D67EBE62-C541-45E4-957E-D1D11BE74F68}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "single-project", "single-project", "{0D69B63D-F082-4D57-9FF0-355642C56993}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.Applications.Single.EntityFrameworkCore", "migrations\LY.MicroService.Applications.Single.EntityFrameworkCore\LY.MicroService.Applications.Single.EntityFrameworkCore.csproj", "{7623D363-F0BD-400C-B8AB-3FD9699D92D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.Applications.Single.DbMigrator", "migrations\LY.MicroService.Applications.Single.DbMigrator\LY.MicroService.Applications.Single.DbMigrator.csproj", "{E2BA59EA-769B-4D5B-8032-CB9682D0D73A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{5F0926F3-463D-445B-9746-0A037DC431F9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.MicroService.Internal.ApiGateway", "..\gateways\internal\LINGYUN.MicroService.Internal.ApiGateway\src\LINGYUN.MicroService.Internal.ApiGateway\LINGYUN.MicroService.Internal.ApiGateway.csproj", "{21878B72-9801-41CE-88CD-7195714AE9BA}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "feature-management", "feature-management", "{97C36EF3-805E-4B93-9AF6-C1E22AA583B1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "permissions-management", "permissions-management", "{99CB6AD9-92E8-4B9B-99E3-28404AA41655}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application.Contracts", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application.Contracts\LINGYUN.Abp.FeatureManagement.Application.Contracts.csproj", "{2263600B-30CB-4188-925D-92F12F904163}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Application", "modules\feature-management\LINGYUN.Abp.FeatureManagement.Application\LINGYUN.Abp.FeatureManagement.Application.csproj", "{2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.HttpApi", "modules\feature-management\LINGYUN.Abp.FeatureManagement.HttpApi\LINGYUN.Abp.FeatureManagement.HttpApi.csproj", "{C1023A56-87CE-4227-8F0E-0F9DAA1E20B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application.Contracts", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application.Contracts\LINGYUN.Abp.PermissionManagement.Application.Contracts.csproj", "{FAD86432-6A95-47DE-8E3A-FC2101753C52}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Application", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Application\LINGYUN.Abp.PermissionManagement.Application.csproj", "{5F278E32-3A2A-4654-BD3C-B183301382FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.HttpApi", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.HttpApi\LINGYUN.Abp.PermissionManagement.HttpApi.csproj", "{1DB57C74-1C40-4414-B968-937C3C1C157E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits", "modules\permissions-management\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits\LINGYUN.Abp.PermissionManagement.Domain.OrganizationUnits.csproj", "{F10EB725-5A50-4C80-B8D1-88C7BE23D5A9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Features.Client", "framework\features\LINGYUN.Abp.Features.Client\LINGYUN.Abp.Features.Client.csproj", "{C4D3B4CA-6631-4447-9D89-A535305E581A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.FeatureManagement.Client", "framework\features\LINGYUN.Abp.FeatureManagement.Client\LINGYUN.Abp.FeatureManagement.Client.csproj", "{18FCB763-1EFF-47DF-ACED-98B7F994FD10}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Logging.Serilog.Elasticsearch", "framework\logging\LINGYUN.Abp.Logging.Serilog.Elasticsearch\LINGYUN.Abp.Logging.Serilog.Elasticsearch.csproj", "{3B5EB3D6-08FD-490C-BC70-805B199A0333}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{28422FE4-8D58-4D8A-8363-7A9D569A5695}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application.Contracts\LINGYUN.Abp.WeChat.Work.Application.Contracts.csproj", "{90C71347-89E2-4546-9A64-FE56F6A48E13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj", "{93B1913D-41B8-4FAB-8472-4BE03F4DC03C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj", "{6FA91938-03AB-41B0-9A80-14AE550D745E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.WeChat.Work", "modules\realtime-notifications\LINGYUN.Abp.Notifications.WeChat.Work\LINGYUN.Abp.Notifications.WeChat.Work.csproj", "{838A6EB6-BCD4-498E-A729-6875F4A6EDF1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.Portal", "modules\openIddict\LINGYUN.Abp.OpenIddict.Portal\LINGYUN.Abp.OpenIddict.Portal.csproj", "{EA9F69A2-ACCF-477B-9519-257CF47DC0F4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.WeChat.Work", "modules\openIddict\LINGYUN.Abp.OpenIddict.WeChat.Work\LINGYUN.Abp.OpenIddict.WeChat.Work.csproj", "{7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "settings", "settings", "{78DDE8A1-6501-4213-9BB5-CE6A11341F7D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "idempotent", "idempotent", "{5531E2F2-2FC2-45A0-93C7-7FC6F6A4F0AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Idempotent", "framework\common\LINGYUN.Abp.Idempotent\LINGYUN.Abp.Idempotent.csproj", "{3DFAECE7-496B-4E86-A23F-5F9A597D1119}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Idempotent", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Idempotent\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.csproj", "{3690518A-D6C3-42CC-AEC2-6D48C6987F68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Idempotent.Wrapper.csproj", "{0D34162C-0CE3-4D7B-B19A-4786C616D0B3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Wrapper", "framework\common\LINGYUN.Abp.AspNetCore.Wrapper\LINGYUN.Abp.AspNetCore.Wrapper.csproj", "{FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application.Contracts\LINGYUN.Abp.WeChat.Official.Application.Contracts.csproj", "{B7F866FF-8C8F-4C7D-9084-E0C206F1F26F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application\LINGYUN.Abp.WeChat.Official.Application.csproj", "{E957DB2E-589D-4310-9576-92F108A67CE7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Official.HttpApi\LINGYUN.Abp.WeChat.Official.HttpApi.csproj", "{4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Common", "framework\wechat\LINGYUN.Abp.WeChat.Common\LINGYUN.Abp.WeChat.Common.csproj", "{C4690A20-8628-4A39-8E71-2D09800D0E72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Common", "framework\wechat\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj", "{8233A44F-4DFC-4701-9C04-834FD3C97060}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{66A6E78D-E547-4DD7-9844-087FAB3D03C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.TaskManagement", "modules\task-management\LINGYUN.Abp.BackgroundTasks.TaskManagement\LINGYUN.Abp.BackgroundTasks.TaskManagement.csproj", "{A99F5406-37DC-4677-9166-9BDE90C26CA6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Jobs", "modules\saas\LINGYUN.Abp.Saas.Jobs\LINGYUN.Abp.Saas.Jobs.csproj", "{8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.SmsValidator", "modules\identityServer\LINGYUN.Abp.IdentityServer.SmsValidator\LINGYUN.Abp.IdentityServer.SmsValidator.csproj", "{7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Portal", "modules\identityServer\LINGYUN.Abp.IdentityServer.Portal\LINGYUN.Abp.IdentityServer.Portal.csproj", "{986B92F6-A758-4D1F-8BC7-BFD13FF38591}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.WeChat.Work", "modules\identityServer\LINGYUN.Abp.IdentityServer.WeChat.Work\LINGYUN.Abp.IdentityServer.WeChat.Work.csproj", "{62D72C3E-5C57-439D-B7F7-5C55CC384A7A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{74156CFF-C236-4DED-B810-FAD8948F51CA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{63D08153-B43C-4884-8818-4AB42E1FEE75}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.AspNetCore.Session", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.Session\LINGYUN.Abp.Identity.AspNetCore.Session.csproj", "{AF02868C-283E-4CB2-8866-3B0CAD1BB2DE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdentityServer.Session", "modules\identityServer\LINGYUN.Abp.IdentityServer.Session\LINGYUN.Abp.IdentityServer.Session.csproj", "{F7459720-873C-4741-A991-A671CF03A6AF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OpenIddict.AspNetCore.Session", "modules\openIddict\LINGYUN.Abp.OpenIddict.AspNetCore.Session\LINGYUN.Abp.OpenIddict.AspNetCore.Session.csproj", "{382CAC43-EE1F-4DA3-B433-E23C3F58F44A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Notifications", "modules\identity\LINGYUN.Abp.Identity.Notifications\LINGYUN.Abp.Identity.Notifications.csproj", "{4634B421-36E6-4169-AA1A-11050902495F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Official.Handlers\LINGYUN.Abp.WeChat.Official.Handlers.csproj", "{BB2DF96A-6ED8-4F47-948C-230EA2065C4C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{DB80C55F-8B70-4840-942A-ED021ED88BD6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Saas", "modules\saas\LINGYUN.Abp.MultiTenancy.Saas\LINGYUN.Abp.MultiTenancy.Saas.csproj", "{E3C07A77-EAF9-4A3F-8814-7D2F116C8E26}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IP2Region", "framework\common\LINGYUN.Abp.IP2Region\LINGYUN.Abp.IP2Region.csproj", "{DA54E88E-C43E-4E31-92D0-08A753F2C08D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{A7417E7F-DB97-48DB-B849-AFC15854A6E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Aliyun.Tests", "tests\LINGYUN.Abp.Aliyun.Tests\LINGYUN.Abp.Aliyun.Tests.csproj", "{8DDE4291-BC57-4C56-9871-B982462F4C3D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IP2Region.Tests", "tests\LINGYUN.Abp.IP2Region.Tests\LINGYUN.Abp.IP2Region.Tests.csproj", "{C5D64A2B-7E7E-4509-9F31-425D59712E6F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{07C2FB08-985C-42FE-85AF-38E40A301668}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.Abstractions", "framework\data-protection\LINGYUN.Abp.DataProtection.Abstractions\LINGYUN.Abp.DataProtection.Abstractions.csproj", "{A52C54FB-C96D-4032-8588-AFC2CD158D23}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection", "framework\data-protection\LINGYUN.Abp.DataProtection\LINGYUN.Abp.DataProtection.csproj", "{B05ED61E-9A36-4E90-B876-F48559E018A6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtection.EntityFrameworkCore", "framework\data-protection\LINGYUN.Abp.DataProtection.EntityFrameworkCore\LINGYUN.Abp.DataProtection.EntityFrameworkCore.csproj", "{1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "data-protection", "data-protection", "{4FCD7337-4320-412D-9BC8-A0B243BC27B3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain.Shared", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain.Shared\LINGYUN.Abp.DataProtectionManagement.Domain.Shared.csproj", "{9D2C789C-8241-4F53-AFEF-F2AB15BAA823}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Domain", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Domain\LINGYUN.Abp.DataProtectionManagement.Domain.csproj", "{36AEA095-E34D-43F5-8000-9FA3A696C312}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application.Contracts", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application.Contracts\LINGYUN.Abp.DataProtectionManagement.Application.Contracts.csproj", "{2D5A9AB0-9F32-4784-8972-814F86C0239D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.Application", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.Application\LINGYUN.Abp.DataProtectionManagement.Application.csproj", "{A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore\LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore.csproj", "{AF15C829-9288-4D7F-95A0-4EA8DF909929}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.DataProtectionManagement.HttpApi", "modules\data-protection\LINGYUN.Abp.DataProtectionManagement.HttpApi\LINGYUN.Abp.DataProtectionManagement.HttpApi.csproj", "{616652A5-A420-475C-AC9F-FC687E3C768B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "demo", "demo", "{E29EC2A4-A2DE-442F-8616-DAFD69F128B8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.Domain.Shared", "modules\demo\LINGYUN.Abp.Demo.Domain.Shared\LINGYUN.Abp.Demo.Domain.Shared.csproj", "{D736C433-C230-46B7-9D43-17D0282EBBDF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.Domain", "modules\demo\LINGYUN.Abp.Demo.Domain\LINGYUN.Abp.Demo.Domain.csproj", "{FA525A71-C0BF-49FB-BAB7-547944618587}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.Application.Contracts", "modules\demo\LINGYUN.Abp.Demo.Application.Contracts\LINGYUN.Abp.Demo.Application.Contracts.csproj", "{532D5703-0090-4F2E-B725-5786D53506C9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.Application", "modules\demo\LINGYUN.Abp.Demo.Application\LINGYUN.Abp.Demo.Application.csproj", "{E538580B-A21F-4B3B-9CB4-741FE8C1C6EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.EntityFrameworkCore", "modules\demo\LINGYUN.Abp.Demo.EntityFrameworkCore\LINGYUN.Abp.Demo.EntityFrameworkCore.csproj", "{71CF0E82-FA07-472A-B32A-AC25EDA82BB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Demo.HttpApi", "modules\demo\LINGYUN.Abp.Demo.HttpApi\LINGYUN.Abp.Demo.HttpApi.csproj", "{77965572-373C-4319-9EF9-73D6E660044B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exporter", "exporter", "{4A2CF141-F32D-45A0-8665-B3705667A6D2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.Application.Contracts", "framework\exporter\LINGYUN.Abp.Exporter.Application.Contracts\LINGYUN.Abp.Exporter.Application.Contracts.csproj", "{A3924A79-1ADC-458D-8764-3958297BDEB0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.Application", "framework\exporter\LINGYUN.Abp.Exporter.Application\LINGYUN.Abp.Exporter.Application.csproj", "{38A933EB-82F1-42A6-ABF3-F55975B4078E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.Core", "framework\exporter\LINGYUN.Abp.Exporter.Core\LINGYUN.Abp.Exporter.Core.csproj", "{03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.MiniExcel", "framework\exporter\LINGYUN.Abp.Exporter.MiniExcel\LINGYUN.Abp.Exporter.MiniExcel.csproj", "{CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Exporter.MagicodesIE.Excel", "framework\exporter\LINGYUN.Abp.Exporter.MagicodesIE.Excel\LINGYUN.Abp.Exporter.MagicodesIE.Excel.csproj", "{319428B9-CE7F-4027-92FA-6311C4CE95FB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Minio", "modules\oss-management\LINGYUN.Abp.OssManagement.Minio\LINGYUN.Abp.OssManagement.Minio.csproj", "{9AE3E97E-8846-4315-9546-FF97E97FD49F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Imaging", "modules\oss-management\LINGYUN.Abp.OssManagement.Imaging\LINGYUN.Abp.OssManagement.Imaging.csproj", "{BC7A8662-4313-4F1D-B267-9B1B69444CD3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "cap", "cap", "{7C35101B-EA29-4B3D-B424-FAD625977E4D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{4539FCDB-7192-442C-BD9B-0AC71E882F4F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer", "migrations\LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer\LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.csproj", "{30EEF879-CFF7-4661-89CB-9CB68328D008}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LY.AIO.Applications.Single", "services\LY.AIO.Applications.Single\LY.AIO.Applications.Single.csproj", "{37740138-D088-46F5-83A8-8A8180FE65D8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.IP.Location", "framework\common\LINGYUN.Abp.IP.Location\LINGYUN.Abp.IP.Location.csproj", "{5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AuditLogging.IP.Location", "framework\auditing\LINGYUN.Abp.AuditLogging.IP.Location\LINGYUN.Abp.AuditLogging.IP.Location.csproj", "{77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LY.MicroService.Applications.Single.EntityFrameworkCore.MySql", "migrations\LY.MicroService.Applications.Single.EntityFrameworkCore.MySql\LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.csproj", "{746813A9-4221-42D8-AAB5-66CB69EC844F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Encryption.SM4", "framework\security\LINGYUN.Abp.Encryption.SM4\LINGYUN.Abp.Encryption.SM4.csproj", "{15106D95-EE9A-4C9D-AB12-41FBE46A9A89}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer\LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer.csproj", "{EB3EC78D-CD1C-423F-B866-74E0DC8D429D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql.csproj", "{C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql", "migrations\LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql\LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.csproj", "{FCD95DCE-9DF4-403C-966C-FF19ADD2EA43}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform", "modules\platform\LINGYUN.Abp.Sms.Platform\LINGYUN.Abp.Sms.Platform.csproj", "{A31C7F96-3AC6-44AF-B505-7D900C945291}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.HttpApi.Client", "modules\platform\LINGYUN.Platform.HttpApi.Client\LINGYUN.Platform.HttpApi.Client.csproj", "{6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform", "modules\platform\LINGYUN.Abp.Emailing.Platform\LINGYUN.Abp.Emailing.Platform.csproj", "{9D357D4C-532A-4ADC-9CCB-C95B4E033547}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gdpr", "gdpr", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain\LINGYUN.Abp.Gdpr.Domain.csproj", "{C33DBB02-F788-4EE0-ABDD-22861FC40D79}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Shared", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Shared\LINGYUN.Abp.Gdpr.Domain.Shared.csproj", "{E115487D-AAEF-4623-832B-94C14C79E991}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application.Contracts", "modules\gdpr\LINGYUN.Abp.Gdpr.Application.Contracts\LINGYUN.Abp.Gdpr.Application.Contracts.csproj", "{67B2403C-FFC8-47C7-BD71-A9D730430024}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Application", "modules\gdpr\LINGYUN.Abp.Gdpr.Application\LINGYUN.Abp.Gdpr.Application.csproj", "{DA42E464-C824-461C-8D17-14FC2B293F65}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi\LINGYUN.Abp.Gdpr.HttpApi.csproj", "{CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.EntityFrameworkCore", "modules\gdpr\LINGYUN.Abp.Gdpr.EntityFrameworkCore\LINGYUN.Abp.Gdpr.EntityFrameworkCore.csproj", "{57C95347-CF48-43DD-BFC9-597A43041AC5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Domain.Identity", "modules\gdpr\LINGYUN.Abp.Gdpr.Domain.Identity\LINGYUN.Abp.Gdpr.Domain.Identity.csproj", "{06FC3141-5F92-43A6-94C9-E2519EE9A91E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web", "modules\account\LINGYUN.Abp.Account.Web\LINGYUN.Abp.Account.Web.csproj", "{4E3CE014-38BF-FF33-A107-B268E57CE8E9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.IdentityServer", "modules\account\LINGYUN.Abp.Account.Web.IdentityServer\LINGYUN.Abp.Account.Web.IdentityServer.csproj", "{57A61286-DE14-9313-5BAB-B077C6239377}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OpenIddict", "modules\account\LINGYUN.Abp.Account.Web.OpenIddict\LINGYUN.Abp.Account.Web.OpenIddict.csproj", "{44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.HttpApi.Client", "modules\account\LINGYUN.Abp.Account.HttpApi.Client\LINGYUN.Abp.Account.HttpApi.Client.csproj", "{B080B644-A835-42EE-EBF5-C47B6D075588}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.HttpApi.Client", "modules\gdpr\LINGYUN.Abp.Gdpr.HttpApi.Client\LINGYUN.Abp.Gdpr.HttpApi.Client.csproj", "{170F4C72-BED2-C77A-64B0-F4CB9A232026}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Gdpr.Web", "modules\gdpr\LINGYUN.Abp.Gdpr.Web\LINGYUN.Abp.Gdpr.Web.csproj", "{00868838-6891-B034-AAB7-AADAA3ECDCB3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.QrCode", "modules\identity\LINGYUN.Abp.Identity.QrCode\LINGYUN.Abp.Identity.QrCode.csproj", "{E40CB92D-6C03-4A61-9A47-057CA504A46B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.OpenIddict.QrCode", "modules\openIddict\LINGYUN.Abp.OpenIddict.QrCode\LINGYUN.Abp.OpenIddict.QrCode.csproj", "{4C7594CE-FB2F-4309-B95C-D4460892CF6E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.AspNetCore.QrCode", "modules\identity\LINGYUN.Abp.Identity.AspNetCore.QrCode\LINGYUN.Abp.Identity.AspNetCore.QrCode.csproj", "{C9266D5D-3860-09C3-F566-489BBB57A534}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.AspNetCore", "framework\wechat\LINGYUN.Abp.WeChat.Work.AspNetCore\LINGYUN.Abp.WeChat.Work.AspNetCore.csproj", "{40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.WeChat.Work", "framework\wechat\LINGYUN.Abp.Identity.WeChat.Work\LINGYUN.Abp.Identity.WeChat.Work.csproj", "{CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.DbChecker", "modules\saas\LINGYUN.Abp.Saas.DbChecker\LINGYUN.Abp.Saas.DbChecker.csproj", "{32F0884D-DA64-4659-AEB7-2717B977855F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.MySqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.MySqlInstaller\LINGYUN.Abp.Quartz.MySqlInstaller.csproj", "{B6452D3F-E58C-C433-E52A-F65EE2657E01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlServerInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlServerInstaller\LINGYUN.Abp.Quartz.SqlServerInstaller.csproj", "{D613F393-9CEE-2D3B-33C9-90630F8348E7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TaskManagement.HttpApi.Client", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi.Client\LINGYUN.Abp.TaskManagement.HttpApi.Client.csproj", "{2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.HttpApi.Client", "modules\saas\LINGYUN.Abp.Saas.HttpApi.Client\LINGYUN.Abp.Saas.HttpApi.Client.csproj", "{311C3A82-3B01-79BD-F9C5-FCC2549A9A8D}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Notifications.Templating", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Templating\LINGYUN.Abp.Notifications.Templating.csproj", "{F2A31684-7A38-B77D-CCAA-C21B9A8B45CF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Settings", "framework\settings\LINGYUN.Abp.Settings\LINGYUN.Abp.Settings.csproj", "{77DFF548-13F4-9FE9-930B-B7642FF722A6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elasticsearch", "elasticsearch", "{22295ECE-A973-43F0-A6F2-982F7DB02F4E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{B8D0DCBD-8D03-E450-0258-D0660A356BF0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlInstaller\LINGYUN.Abp.Quartz.SqlInstaller.csproj", "{A8586A5A-A213-4C66-819C-E692187B1F39}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.UI.Navigation.VueVbenAdmin5", "modules\platform\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5\LINGYUN.Abp.UI.Navigation.VueVbenAdmin5.csproj", "{113167DA-602A-4EBE-9357-D83C090DBA3F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Web.OAuth", "modules\account\LINGYUN.Abp.Account.Web.OAuth\LINGYUN.Abp.Account.Web.OAuth.csproj", "{2379F502-BBBD-4BF2-91F7-D0E5C61E91B7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.OAuth", "modules\account\LINGYUN.Abp.Account.OAuth\LINGYUN.Abp.Account.OAuth.csproj", "{2E4C437A-989D-68D9-C5FB-1AE085B2CBC8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.Designer", "modules\elsa\LINGYUN.Abp.Elsa.Designer\LINGYUN.Abp.Elsa.Designer.csproj", "{C9756AD3-3AEA-4AA8-99E3-8305D37E0903}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.ExternalContact", "framework\wechat\LINGYUN.Abp.WeChat.Work.ExternalContact\LINGYUN.Abp.WeChat.Work.ExternalContact.csproj", "{B4311504-B0C8-AC8D-02A5-81AD43B4087B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Account.Security", "modules\account\LINGYUN.Abp.Account.Security\LINGYUN.Abp.Account.Security.csproj", "{5FA85E8E-3276-43DF-CC93-6A9847905166}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Contacts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Contacts\LINGYUN.Abp.WeChat.Work.Contacts.csproj", "{C996D147-5B81-49D9-949B-F3BC185B2CD4}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.OA", "framework\wechat\LINGYUN.Abp.WeChat.Work.OA\LINGYUN.Abp.WeChat.Work.OA.csproj", "{AB207B2A-C8E7-977D-98E6-66527CBB2B7F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.PostgresSqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.PostgresSqlInstaller\LINGYUN.Abp.Quartz.PostgresSqlInstaller.csproj", "{CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "ai", "ai", "{E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AI.Core", "modules\ai\LINGYUN.Abp.AI.Core\LINGYUN.Abp.AI.Core.csproj", "{72083C13-32E8-1122-7761-CE7C0B64AABA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AI.Agent", "modules\ai\LINGYUN.Abp.AI.Agent\LINGYUN.Abp.AI.Agent.csproj", "{F80E583B-93F3-C1E6-A83D-AC83132DBC5F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.Domain.Shared", "modules\ai\LINGYUN.Abp.AIManagement.Domain.Shared\LINGYUN.Abp.AIManagement.Domain.Shared.csproj", "{D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.Domain", "modules\ai\LINGYUN.Abp.AIManagement.Domain\LINGYUN.Abp.AIManagement.Domain.csproj", "{7D372713-5117-82F2-7591-C0AE09BA04CF}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.Application.Contracts", "modules\ai\LINGYUN.Abp.AIManagement.Application.Contracts\LINGYUN.Abp.AIManagement.Application.Contracts.csproj", "{479D24D3-D01D-6655-87E8-5A236B3BA371}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.Application", "modules\ai\LINGYUN.Abp.AIManagement.Application\LINGYUN.Abp.AIManagement.Application.csproj", "{62A90887-34B9-1BDE-8851-9CC926AEBBBE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.EntityFrameworkCore", "modules\ai\LINGYUN.Abp.AIManagement.EntityFrameworkCore\LINGYUN.Abp.AIManagement.EntityFrameworkCore.csproj", "{5AFC464A-9B1F-7415-2D2E-320D567ED818}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.HttpApi", "modules\ai\LINGYUN.Abp.AIManagement.HttpApi\LINGYUN.Abp.AIManagement.HttpApi.csproj", "{3B618981-F1CB-9AEC-E90B-4B05B982C1FC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AIManagement.HttpApi.Client", "modules\ai\LINGYUN.Abp.AIManagement.HttpApi.Client\LINGYUN.Abp.AIManagement.HttpApi.Client.csproj", "{44957812-548A-D14C-6C92-F9902DADDCDA}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AI.Tools", "modules\ai\LINGYUN.Abp.AI.Tools\LINGYUN.Abp.AI.Tools.csproj", "{A879CDFF-BC9F-C591-0D7E-3A4381489425}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AI.Tools.Http", "modules\ai\LINGYUN.Abp.AI.Tools.Http\LINGYUN.Abp.AI.Tools.Http.csproj", "{1A02494C-AC35-C41C-3E89-2CB4FEF0A792}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.AI.Tools.Mcp", "modules\ai\LINGYUN.Abp.AI.Tools.Mcp\LINGYUN.Abp.AI.Tools.Mcp.csproj", "{A91A8E8C-7B2F-5278-B771-668E5292E9DC}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003}.Release|Any CPU.Build.0 = Release|Any CPU - {4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20}.Release|Any CPU.Build.0 = Release|Any CPU - {14DC8B87-82B5-4A76-BBAB-BBD76F7C3555}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {14DC8B87-82B5-4A76-BBAB-BBD76F7C3555}.Debug|Any CPU.Build.0 = Debug|Any CPU - {14DC8B87-82B5-4A76-BBAB-BBD76F7C3555}.Release|Any CPU.ActiveCfg = Release|Any CPU - {14DC8B87-82B5-4A76-BBAB-BBD76F7C3555}.Release|Any CPU.Build.0 = Release|Any CPU - {4995C481-7465-4A36-8416-0D0D14F64B10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4995C481-7465-4A36-8416-0D0D14F64B10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4995C481-7465-4A36-8416-0D0D14F64B10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4995C481-7465-4A36-8416-0D0D14F64B10}.Release|Any CPU.Build.0 = Release|Any CPU - {9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1}.Release|Any CPU.Build.0 = Release|Any CPU - {3B6F4C72-975B-44A4-9F72-A217E53E05C1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B6F4C72-975B-44A4-9F72-A217E53E05C1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B6F4C72-975B-44A4-9F72-A217E53E05C1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B6F4C72-975B-44A4-9F72-A217E53E05C1}.Release|Any CPU.Build.0 = Release|Any CPU - {95909DDC-66A1-410A-9AB1-CD62EA33CFA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {95909DDC-66A1-410A-9AB1-CD62EA33CFA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {95909DDC-66A1-410A-9AB1-CD62EA33CFA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {95909DDC-66A1-410A-9AB1-CD62EA33CFA0}.Release|Any CPU.Build.0 = Release|Any CPU - {1AFDF87C-220D-44EC-B5DA-99B0510AE561}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1AFDF87C-220D-44EC-B5DA-99B0510AE561}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1AFDF87C-220D-44EC-B5DA-99B0510AE561}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1AFDF87C-220D-44EC-B5DA-99B0510AE561}.Release|Any CPU.Build.0 = Release|Any CPU - {7F831848-A1C1-49FE-B81A-499AB6E17286}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7F831848-A1C1-49FE-B81A-499AB6E17286}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7F831848-A1C1-49FE-B81A-499AB6E17286}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7F831848-A1C1-49FE-B81A-499AB6E17286}.Release|Any CPU.Build.0 = Release|Any CPU - {9C2A3557-31E4-4D06-A08E-138E31412AD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9C2A3557-31E4-4D06-A08E-138E31412AD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9C2A3557-31E4-4D06-A08E-138E31412AD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9C2A3557-31E4-4D06-A08E-138E31412AD4}.Release|Any CPU.Build.0 = Release|Any CPU - {7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6}.Release|Any CPU.Build.0 = Release|Any CPU - {8064607C-BDB9-454D-8E76-2B21023CD071}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8064607C-BDB9-454D-8E76-2B21023CD071}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8064607C-BDB9-454D-8E76-2B21023CD071}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8064607C-BDB9-454D-8E76-2B21023CD071}.Release|Any CPU.Build.0 = Release|Any CPU - {A3BF5605-8684-4713-885D-CC498CC37686}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3BF5605-8684-4713-885D-CC498CC37686}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3BF5605-8684-4713-885D-CC498CC37686}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3BF5605-8684-4713-885D-CC498CC37686}.Release|Any CPU.Build.0 = Release|Any CPU - {D1399D41-0273-45FA-969F-FA9C77432A06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D1399D41-0273-45FA-969F-FA9C77432A06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D1399D41-0273-45FA-969F-FA9C77432A06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D1399D41-0273-45FA-969F-FA9C77432A06}.Release|Any CPU.Build.0 = Release|Any CPU - {E790A9A3-3C24-4478-A547-0FE13F7F6963}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E790A9A3-3C24-4478-A547-0FE13F7F6963}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E790A9A3-3C24-4478-A547-0FE13F7F6963}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E790A9A3-3C24-4478-A547-0FE13F7F6963}.Release|Any CPU.Build.0 = Release|Any CPU - {56F007F7-23A8-4F13-B45F-57D4EB35AB2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56F007F7-23A8-4F13-B45F-57D4EB35AB2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56F007F7-23A8-4F13-B45F-57D4EB35AB2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56F007F7-23A8-4F13-B45F-57D4EB35AB2C}.Release|Any CPU.Build.0 = Release|Any CPU - {7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8}.Release|Any CPU.Build.0 = Release|Any CPU - {7259B767-9528-4EF9-8F81-20344879F1CD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7259B767-9528-4EF9-8F81-20344879F1CD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7259B767-9528-4EF9-8F81-20344879F1CD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7259B767-9528-4EF9-8F81-20344879F1CD}.Release|Any CPU.Build.0 = Release|Any CPU - {ED7E70B9-8FEE-48DF-9962-AD1062769342}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED7E70B9-8FEE-48DF-9962-AD1062769342}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED7E70B9-8FEE-48DF-9962-AD1062769342}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED7E70B9-8FEE-48DF-9962-AD1062769342}.Release|Any CPU.Build.0 = Release|Any CPU - {BAD28D5B-8A14-43DF-A236-E313FD97E799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BAD28D5B-8A14-43DF-A236-E313FD97E799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BAD28D5B-8A14-43DF-A236-E313FD97E799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BAD28D5B-8A14-43DF-A236-E313FD97E799}.Release|Any CPU.Build.0 = Release|Any CPU - {DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8}.Release|Any CPU.Build.0 = Release|Any CPU - {60C97165-7CAB-467A-857E-9343B239F8EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {60C97165-7CAB-467A-857E-9343B239F8EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {60C97165-7CAB-467A-857E-9343B239F8EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {60C97165-7CAB-467A-857E-9343B239F8EF}.Release|Any CPU.Build.0 = Release|Any CPU - {C18979C7-EBD1-437D-A877-4A97B68761A5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C18979C7-EBD1-437D-A877-4A97B68761A5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C18979C7-EBD1-437D-A877-4A97B68761A5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C18979C7-EBD1-437D-A877-4A97B68761A5}.Release|Any CPU.Build.0 = Release|Any CPU - {DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F}.Release|Any CPU.Build.0 = Release|Any CPU - {D2AB9E95-A074-498A-A475-2298D0F1973E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2AB9E95-A074-498A-A475-2298D0F1973E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2AB9E95-A074-498A-A475-2298D0F1973E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2AB9E95-A074-498A-A475-2298D0F1973E}.Release|Any CPU.Build.0 = Release|Any CPU - {DA8FB07D-1347-4E5A-B84C-8AB955A652AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA8FB07D-1347-4E5A-B84C-8AB955A652AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA8FB07D-1347-4E5A-B84C-8AB955A652AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA8FB07D-1347-4E5A-B84C-8AB955A652AD}.Release|Any CPU.Build.0 = Release|Any CPU - {2D66E202-B34D-4998-BD80-5411C8087695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D66E202-B34D-4998-BD80-5411C8087695}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D66E202-B34D-4998-BD80-5411C8087695}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D66E202-B34D-4998-BD80-5411C8087695}.Release|Any CPU.Build.0 = Release|Any CPU - {4EC45855-A09A-4B77-99A8-DA00E2D702E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4EC45855-A09A-4B77-99A8-DA00E2D702E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4EC45855-A09A-4B77-99A8-DA00E2D702E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4EC45855-A09A-4B77-99A8-DA00E2D702E8}.Release|Any CPU.Build.0 = Release|Any CPU - {42439E6A-0084-48A9-9620-0B9EAB4182C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {42439E6A-0084-48A9-9620-0B9EAB4182C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {42439E6A-0084-48A9-9620-0B9EAB4182C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {42439E6A-0084-48A9-9620-0B9EAB4182C4}.Release|Any CPU.Build.0 = Release|Any CPU - {F1290A8A-3BBE-4647-90D9-4AD537432AB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1290A8A-3BBE-4647-90D9-4AD537432AB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1290A8A-3BBE-4647-90D9-4AD537432AB5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1290A8A-3BBE-4647-90D9-4AD537432AB5}.Release|Any CPU.Build.0 = Release|Any CPU - {FAF2D4A3-7A7F-4848-9817-66D164D03F0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FAF2D4A3-7A7F-4848-9817-66D164D03F0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FAF2D4A3-7A7F-4848-9817-66D164D03F0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FAF2D4A3-7A7F-4848-9817-66D164D03F0F}.Release|Any CPU.Build.0 = Release|Any CPU - {9E728961-7C0B-4C2B-92E4-8965B45ADB19}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E728961-7C0B-4C2B-92E4-8965B45ADB19}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E728961-7C0B-4C2B-92E4-8965B45ADB19}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E728961-7C0B-4C2B-92E4-8965B45ADB19}.Release|Any CPU.Build.0 = Release|Any CPU - {79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A}.Release|Any CPU.Build.0 = Release|Any CPU - {45E954A6-5F29-48B3-B518-513F6837EE27}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {45E954A6-5F29-48B3-B518-513F6837EE27}.Debug|Any CPU.Build.0 = Debug|Any CPU - {45E954A6-5F29-48B3-B518-513F6837EE27}.Release|Any CPU.ActiveCfg = Release|Any CPU - {45E954A6-5F29-48B3-B518-513F6837EE27}.Release|Any CPU.Build.0 = Release|Any CPU - {D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94}.Release|Any CPU.Build.0 = Release|Any CPU - {2DAE26C2-BB2C-49CE-B52D-D53383ADE560}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2DAE26C2-BB2C-49CE-B52D-D53383ADE560}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2DAE26C2-BB2C-49CE-B52D-D53383ADE560}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2DAE26C2-BB2C-49CE-B52D-D53383ADE560}.Release|Any CPU.Build.0 = Release|Any CPU - {92BC5C99-A17F-4936-BF8C-ED2AF9795D6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92BC5C99-A17F-4936-BF8C-ED2AF9795D6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92BC5C99-A17F-4936-BF8C-ED2AF9795D6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92BC5C99-A17F-4936-BF8C-ED2AF9795D6E}.Release|Any CPU.Build.0 = Release|Any CPU - {0FCB18BE-6D50-4567-8CBD-80B0336D9685}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0FCB18BE-6D50-4567-8CBD-80B0336D9685}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0FCB18BE-6D50-4567-8CBD-80B0336D9685}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0FCB18BE-6D50-4567-8CBD-80B0336D9685}.Release|Any CPU.Build.0 = Release|Any CPU - {9B4C9894-D295-4D16-AC90-F98563B37722}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9B4C9894-D295-4D16-AC90-F98563B37722}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9B4C9894-D295-4D16-AC90-F98563B37722}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9B4C9894-D295-4D16-AC90-F98563B37722}.Release|Any CPU.Build.0 = Release|Any CPU - {E7EFE38E-1214-4D7D-A9DA-F753D613F956}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E7EFE38E-1214-4D7D-A9DA-F753D613F956}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E7EFE38E-1214-4D7D-A9DA-F753D613F956}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E7EFE38E-1214-4D7D-A9DA-F753D613F956}.Release|Any CPU.Build.0 = Release|Any CPU - {BC3E9C3B-EA51-4CC8-AD94-7F0285239907}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC3E9C3B-EA51-4CC8-AD94-7F0285239907}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC3E9C3B-EA51-4CC8-AD94-7F0285239907}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC3E9C3B-EA51-4CC8-AD94-7F0285239907}.Release|Any CPU.Build.0 = Release|Any CPU - {33D6A170-D609-430C-B110-E1A8F3322C06}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33D6A170-D609-430C-B110-E1A8F3322C06}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33D6A170-D609-430C-B110-E1A8F3322C06}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33D6A170-D609-430C-B110-E1A8F3322C06}.Release|Any CPU.Build.0 = Release|Any CPU - {E1758B64-3ED1-4D79-AAAB-8307BFF16C0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E1758B64-3ED1-4D79-AAAB-8307BFF16C0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E1758B64-3ED1-4D79-AAAB-8307BFF16C0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E1758B64-3ED1-4D79-AAAB-8307BFF16C0F}.Release|Any CPU.Build.0 = Release|Any CPU - {3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A}.Release|Any CPU.Build.0 = Release|Any CPU - {19CD928F-D16F-4A91-BA0C-2459F5055565}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {19CD928F-D16F-4A91-BA0C-2459F5055565}.Debug|Any CPU.Build.0 = Debug|Any CPU - {19CD928F-D16F-4A91-BA0C-2459F5055565}.Release|Any CPU.ActiveCfg = Release|Any CPU - {19CD928F-D16F-4A91-BA0C-2459F5055565}.Release|Any CPU.Build.0 = Release|Any CPU - {86993E17-8793-45ED-B636-C921BB1165D7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86993E17-8793-45ED-B636-C921BB1165D7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86993E17-8793-45ED-B636-C921BB1165D7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86993E17-8793-45ED-B636-C921BB1165D7}.Release|Any CPU.Build.0 = Release|Any CPU - {158AFAD1-39AE-4135-81EE-55F905802A8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {158AFAD1-39AE-4135-81EE-55F905802A8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {158AFAD1-39AE-4135-81EE-55F905802A8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {158AFAD1-39AE-4135-81EE-55F905802A8B}.Release|Any CPU.Build.0 = Release|Any CPU - {2BE2CFE9-26E7-4791-B9DE-109B465B701C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BE2CFE9-26E7-4791-B9DE-109B465B701C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BE2CFE9-26E7-4791-B9DE-109B465B701C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BE2CFE9-26E7-4791-B9DE-109B465B701C}.Release|Any CPU.Build.0 = Release|Any CPU - {BF943CF0-2732-41D3-BFE3-9B843564D807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF943CF0-2732-41D3-BFE3-9B843564D807}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF943CF0-2732-41D3-BFE3-9B843564D807}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF943CF0-2732-41D3-BFE3-9B843564D807}.Release|Any CPU.Build.0 = Release|Any CPU - {B93528E2-55EA-4847-950D-8B95B1CC2909}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B93528E2-55EA-4847-950D-8B95B1CC2909}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B93528E2-55EA-4847-950D-8B95B1CC2909}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B93528E2-55EA-4847-950D-8B95B1CC2909}.Release|Any CPU.Build.0 = Release|Any CPU - {2BD4EF1A-F6F5-4199-9BD2-4B07319852DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BD4EF1A-F6F5-4199-9BD2-4B07319852DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BD4EF1A-F6F5-4199-9BD2-4B07319852DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BD4EF1A-F6F5-4199-9BD2-4B07319852DB}.Release|Any CPU.Build.0 = Release|Any CPU - {BCF85E69-4D97-4DD3-8526-B33C76BD17CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BCF85E69-4D97-4DD3-8526-B33C76BD17CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BCF85E69-4D97-4DD3-8526-B33C76BD17CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BCF85E69-4D97-4DD3-8526-B33C76BD17CA}.Release|Any CPU.Build.0 = Release|Any CPU - {2B1B759E-670A-4837-854A-4748C67BB15B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B1B759E-670A-4837-854A-4748C67BB15B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B1B759E-670A-4837-854A-4748C67BB15B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B1B759E-670A-4837-854A-4748C67BB15B}.Release|Any CPU.Build.0 = Release|Any CPU - {9ACB83F6-C911-4473-973D-A3BECFB5F1E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9ACB83F6-C911-4473-973D-A3BECFB5F1E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9ACB83F6-C911-4473-973D-A3BECFB5F1E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9ACB83F6-C911-4473-973D-A3BECFB5F1E6}.Release|Any CPU.Build.0 = Release|Any CPU - {97064B96-B5AC-461D-BBBF-97A864F373E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97064B96-B5AC-461D-BBBF-97A864F373E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97064B96-B5AC-461D-BBBF-97A864F373E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97064B96-B5AC-461D-BBBF-97A864F373E6}.Release|Any CPU.Build.0 = Release|Any CPU - {617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {DB4498D8-E45B-4A5A-9BF2-830039B2D38D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB4498D8-E45B-4A5A-9BF2-830039B2D38D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB4498D8-E45B-4A5A-9BF2-830039B2D38D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB4498D8-E45B-4A5A-9BF2-830039B2D38D}.Release|Any CPU.Build.0 = Release|Any CPU - {412BAB54-282E-4A01-AF72-E76F3AF31AE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {412BAB54-282E-4A01-AF72-E76F3AF31AE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {412BAB54-282E-4A01-AF72-E76F3AF31AE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {412BAB54-282E-4A01-AF72-E76F3AF31AE7}.Release|Any CPU.Build.0 = Release|Any CPU - {EFD48C85-7EA6-4553-B8A3-15A3867C8EC0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EFD48C85-7EA6-4553-B8A3-15A3867C8EC0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EFD48C85-7EA6-4553-B8A3-15A3867C8EC0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EFD48C85-7EA6-4553-B8A3-15A3867C8EC0}.Release|Any CPU.Build.0 = Release|Any CPU - {21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E}.Release|Any CPU.Build.0 = Release|Any CPU - {7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E}.Release|Any CPU.Build.0 = Release|Any CPU - {DD0EBD4F-0BE9-46A1-91E0-6B66A814664C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD0EBD4F-0BE9-46A1-91E0-6B66A814664C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD0EBD4F-0BE9-46A1-91E0-6B66A814664C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD0EBD4F-0BE9-46A1-91E0-6B66A814664C}.Release|Any CPU.Build.0 = Release|Any CPU - {DA053CAE-EBA4-4532-93B5-3347589CB174}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA053CAE-EBA4-4532-93B5-3347589CB174}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA053CAE-EBA4-4532-93B5-3347589CB174}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA053CAE-EBA4-4532-93B5-3347589CB174}.Release|Any CPU.Build.0 = Release|Any CPU - {76810110-6683-4777-9157-8030F9205FBF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76810110-6683-4777-9157-8030F9205FBF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76810110-6683-4777-9157-8030F9205FBF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76810110-6683-4777-9157-8030F9205FBF}.Release|Any CPU.Build.0 = Release|Any CPU - {80DDA32B-2BDA-4704-9458-6D680B08B74C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80DDA32B-2BDA-4704-9458-6D680B08B74C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80DDA32B-2BDA-4704-9458-6D680B08B74C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80DDA32B-2BDA-4704-9458-6D680B08B74C}.Release|Any CPU.Build.0 = Release|Any CPU - {29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B}.Release|Any CPU.Build.0 = Release|Any CPU - {FB07F20F-1BC7-4711-9357-A4B7EA0A2C51}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FB07F20F-1BC7-4711-9357-A4B7EA0A2C51}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FB07F20F-1BC7-4711-9357-A4B7EA0A2C51}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FB07F20F-1BC7-4711-9357-A4B7EA0A2C51}.Release|Any CPU.Build.0 = Release|Any CPU - {ED7AADAF-72D8-4C04-96CE-B46B21C9C343}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ED7AADAF-72D8-4C04-96CE-B46B21C9C343}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ED7AADAF-72D8-4C04-96CE-B46B21C9C343}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ED7AADAF-72D8-4C04-96CE-B46B21C9C343}.Release|Any CPU.Build.0 = Release|Any CPU - {6518F1B5-63EA-46A2-87ED-FD90366594EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6518F1B5-63EA-46A2-87ED-FD90366594EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6518F1B5-63EA-46A2-87ED-FD90366594EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6518F1B5-63EA-46A2-87ED-FD90366594EC}.Release|Any CPU.Build.0 = Release|Any CPU - {AB79F7C4-9AE1-4921-B18A-F64074B1DC69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB79F7C4-9AE1-4921-B18A-F64074B1DC69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB79F7C4-9AE1-4921-B18A-F64074B1DC69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB79F7C4-9AE1-4921-B18A-F64074B1DC69}.Release|Any CPU.Build.0 = Release|Any CPU - {DCF463DE-50CA-4585-BA9F-83F7101B5ED7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCF463DE-50CA-4585-BA9F-83F7101B5ED7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCF463DE-50CA-4585-BA9F-83F7101B5ED7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCF463DE-50CA-4585-BA9F-83F7101B5ED7}.Release|Any CPU.Build.0 = Release|Any CPU - {A2E248DB-B2DD-4916-82A6-5D296C1298B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A2E248DB-B2DD-4916-82A6-5D296C1298B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A2E248DB-B2DD-4916-82A6-5D296C1298B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A2E248DB-B2DD-4916-82A6-5D296C1298B5}.Release|Any CPU.Build.0 = Release|Any CPU - {293C7A2B-46D2-49B6-A8C6-294500ED5AE5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {293C7A2B-46D2-49B6-A8C6-294500ED5AE5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {293C7A2B-46D2-49B6-A8C6-294500ED5AE5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {293C7A2B-46D2-49B6-A8C6-294500ED5AE5}.Release|Any CPU.Build.0 = Release|Any CPU - {21691099-AF37-4706-84AE-C19C72DC09B6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21691099-AF37-4706-84AE-C19C72DC09B6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21691099-AF37-4706-84AE-C19C72DC09B6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21691099-AF37-4706-84AE-C19C72DC09B6}.Release|Any CPU.Build.0 = Release|Any CPU - {C31A17E0-AE56-419C-A6D1-3FCBB68005E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C31A17E0-AE56-419C-A6D1-3FCBB68005E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C31A17E0-AE56-419C-A6D1-3FCBB68005E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C31A17E0-AE56-419C-A6D1-3FCBB68005E2}.Release|Any CPU.Build.0 = Release|Any CPU - {974D842A-9739-40E4-96E8-039552E28D8B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {974D842A-9739-40E4-96E8-039552E28D8B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {974D842A-9739-40E4-96E8-039552E28D8B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {974D842A-9739-40E4-96E8-039552E28D8B}.Release|Any CPU.Build.0 = Release|Any CPU - {7450F9AF-3C5D-4137-AEC7-2AA38E8006E6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7450F9AF-3C5D-4137-AEC7-2AA38E8006E6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7450F9AF-3C5D-4137-AEC7-2AA38E8006E6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7450F9AF-3C5D-4137-AEC7-2AA38E8006E6}.Release|Any CPU.Build.0 = Release|Any CPU - {F3064272-5A6F-4CB9-B79F-8D37A2392CC1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3064272-5A6F-4CB9-B79F-8D37A2392CC1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3064272-5A6F-4CB9-B79F-8D37A2392CC1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3064272-5A6F-4CB9-B79F-8D37A2392CC1}.Release|Any CPU.Build.0 = Release|Any CPU - {1DD17D3E-F8EC-44AA-8437-3AF541CD3988}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1DD17D3E-F8EC-44AA-8437-3AF541CD3988}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DD17D3E-F8EC-44AA-8437-3AF541CD3988}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1DD17D3E-F8EC-44AA-8437-3AF541CD3988}.Release|Any CPU.Build.0 = Release|Any CPU - {F42FAF67-D10F-487A-A74C-E6D8EA90831C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F42FAF67-D10F-487A-A74C-E6D8EA90831C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F42FAF67-D10F-487A-A74C-E6D8EA90831C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F42FAF67-D10F-487A-A74C-E6D8EA90831C}.Release|Any CPU.Build.0 = Release|Any CPU - {81B74E08-06CD-4134-A02D-B4B837945E2B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81B74E08-06CD-4134-A02D-B4B837945E2B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81B74E08-06CD-4134-A02D-B4B837945E2B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81B74E08-06CD-4134-A02D-B4B837945E2B}.Release|Any CPU.Build.0 = Release|Any CPU - {78635E6D-2C35-437C-96CD-29DAEAFE0076}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78635E6D-2C35-437C-96CD-29DAEAFE0076}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78635E6D-2C35-437C-96CD-29DAEAFE0076}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78635E6D-2C35-437C-96CD-29DAEAFE0076}.Release|Any CPU.Build.0 = Release|Any CPU - {F8CBD522-6668-4A5F-B62D-9E37E7DC1279}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F8CBD522-6668-4A5F-B62D-9E37E7DC1279}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F8CBD522-6668-4A5F-B62D-9E37E7DC1279}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F8CBD522-6668-4A5F-B62D-9E37E7DC1279}.Release|Any CPU.Build.0 = Release|Any CPU - {33FC6389-3931-4BD2-A619-36C4A8F5C7B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {33FC6389-3931-4BD2-A619-36C4A8F5C7B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {33FC6389-3931-4BD2-A619-36C4A8F5C7B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {33FC6389-3931-4BD2-A619-36C4A8F5C7B0}.Release|Any CPU.Build.0 = Release|Any CPU - {58A4954C-4901-4172-BEE7-5584ABB0DF45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58A4954C-4901-4172-BEE7-5584ABB0DF45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58A4954C-4901-4172-BEE7-5584ABB0DF45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58A4954C-4901-4172-BEE7-5584ABB0DF45}.Release|Any CPU.Build.0 = Release|Any CPU - {D4BC55C7-1991-4866-A7BA-66653DACF945}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D4BC55C7-1991-4866-A7BA-66653DACF945}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D4BC55C7-1991-4866-A7BA-66653DACF945}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D4BC55C7-1991-4866-A7BA-66653DACF945}.Release|Any CPU.Build.0 = Release|Any CPU - {C6EDE646-6A5E-4495-8A30-88D1EAE9A42E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C6EDE646-6A5E-4495-8A30-88D1EAE9A42E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C6EDE646-6A5E-4495-8A30-88D1EAE9A42E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C6EDE646-6A5E-4495-8A30-88D1EAE9A42E}.Release|Any CPU.Build.0 = Release|Any CPU - {CF1F1193-FECE-4E98-A4FC-643A86F30429}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF1F1193-FECE-4E98-A4FC-643A86F30429}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF1F1193-FECE-4E98-A4FC-643A86F30429}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF1F1193-FECE-4E98-A4FC-643A86F30429}.Release|Any CPU.Build.0 = Release|Any CPU - {46C57140-EE02-4785-9777-F2264EC88135}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46C57140-EE02-4785-9777-F2264EC88135}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46C57140-EE02-4785-9777-F2264EC88135}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46C57140-EE02-4785-9777-F2264EC88135}.Release|Any CPU.Build.0 = Release|Any CPU - {3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA}.Release|Any CPU.Build.0 = Release|Any CPU - {AD3E63A3-3422-4A1A-AC89-B20786A5323E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AD3E63A3-3422-4A1A-AC89-B20786A5323E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AD3E63A3-3422-4A1A-AC89-B20786A5323E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AD3E63A3-3422-4A1A-AC89-B20786A5323E}.Release|Any CPU.Build.0 = Release|Any CPU - {CA2975D9-5477-4281-8D84-F0909F22DFF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA2975D9-5477-4281-8D84-F0909F22DFF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA2975D9-5477-4281-8D84-F0909F22DFF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA2975D9-5477-4281-8D84-F0909F22DFF3}.Release|Any CPU.Build.0 = Release|Any CPU - {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A}.Release|Any CPU.Build.0 = Release|Any CPU - {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34C9609F-556B-44D7-B3DE-5637FEB0BFEC}.Release|Any CPU.Build.0 = Release|Any CPU - {A69E6742-39A6-4C0D-A098-E16A653331AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A69E6742-39A6-4C0D-A098-E16A653331AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A69E6742-39A6-4C0D-A098-E16A653331AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A69E6742-39A6-4C0D-A098-E16A653331AC}.Release|Any CPU.Build.0 = Release|Any CPU - {6AC4C18F-2BB5-47F9-99F5-5585E1D22111}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6AC4C18F-2BB5-47F9-99F5-5585E1D22111}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6AC4C18F-2BB5-47F9-99F5-5585E1D22111}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6AC4C18F-2BB5-47F9-99F5-5585E1D22111}.Release|Any CPU.Build.0 = Release|Any CPU - {4D738A46-2B08-4A88-8787-668A4AD5AE5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D738A46-2B08-4A88-8787-668A4AD5AE5F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D738A46-2B08-4A88-8787-668A4AD5AE5F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D738A46-2B08-4A88-8787-668A4AD5AE5F}.Release|Any CPU.Build.0 = Release|Any CPU - {0B9E97DE-0265-4192-9FAF-B5AF65AC6611}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B9E97DE-0265-4192-9FAF-B5AF65AC6611}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B9E97DE-0265-4192-9FAF-B5AF65AC6611}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B9E97DE-0265-4192-9FAF-B5AF65AC6611}.Release|Any CPU.Build.0 = Release|Any CPU - {C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2}.Release|Any CPU.Build.0 = Release|Any CPU - {EA56194E-B0EF-42B1-BC35-9A677D7D66BB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA56194E-B0EF-42B1-BC35-9A677D7D66BB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA56194E-B0EF-42B1-BC35-9A677D7D66BB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA56194E-B0EF-42B1-BC35-9A677D7D66BB}.Release|Any CPU.Build.0 = Release|Any CPU - {56C00F97-6769-44B2-8004-341D5286E31F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56C00F97-6769-44B2-8004-341D5286E31F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56C00F97-6769-44B2-8004-341D5286E31F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56C00F97-6769-44B2-8004-341D5286E31F}.Release|Any CPU.Build.0 = Release|Any CPU - {DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E}.Release|Any CPU.Build.0 = Release|Any CPU - {6C774F10-5FAC-4177-9BFA-28486747DF3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C774F10-5FAC-4177-9BFA-28486747DF3D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C774F10-5FAC-4177-9BFA-28486747DF3D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C774F10-5FAC-4177-9BFA-28486747DF3D}.Release|Any CPU.Build.0 = Release|Any CPU - {91BD29B8-FD39-4429-A8FF-C5A1E511C632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {91BD29B8-FD39-4429-A8FF-C5A1E511C632}.Debug|Any CPU.Build.0 = Debug|Any CPU - {91BD29B8-FD39-4429-A8FF-C5A1E511C632}.Release|Any CPU.ActiveCfg = Release|Any CPU - {91BD29B8-FD39-4429-A8FF-C5A1E511C632}.Release|Any CPU.Build.0 = Release|Any CPU - {DB29E904-C164-46B3-A12C-3A908FCA6DB9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB29E904-C164-46B3-A12C-3A908FCA6DB9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB29E904-C164-46B3-A12C-3A908FCA6DB9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB29E904-C164-46B3-A12C-3A908FCA6DB9}.Release|Any CPU.Build.0 = Release|Any CPU - {6F5CD33F-ACD9-4BF3-99DE-33A24116A672}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6F5CD33F-ACD9-4BF3-99DE-33A24116A672}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6F5CD33F-ACD9-4BF3-99DE-33A24116A672}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6F5CD33F-ACD9-4BF3-99DE-33A24116A672}.Release|Any CPU.Build.0 = Release|Any CPU - {1EA3971F-E854-4198-AC8D-BC3C4F804B25}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1EA3971F-E854-4198-AC8D-BC3C4F804B25}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1EA3971F-E854-4198-AC8D-BC3C4F804B25}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1EA3971F-E854-4198-AC8D-BC3C4F804B25}.Release|Any CPU.Build.0 = Release|Any CPU - {A5CA092D-E294-4BF6-92AF-CCF136A643D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A5CA092D-E294-4BF6-92AF-CCF136A643D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A5CA092D-E294-4BF6-92AF-CCF136A643D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A5CA092D-E294-4BF6-92AF-CCF136A643D1}.Release|Any CPU.Build.0 = Release|Any CPU - {9CDC9B6C-C69E-483F-B881-5D065FA064C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9CDC9B6C-C69E-483F-B881-5D065FA064C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9CDC9B6C-C69E-483F-B881-5D065FA064C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9CDC9B6C-C69E-483F-B881-5D065FA064C9}.Release|Any CPU.Build.0 = Release|Any CPU - {A74A9B50-0E40-44AD-9360-5BF96696B405}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A74A9B50-0E40-44AD-9360-5BF96696B405}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A74A9B50-0E40-44AD-9360-5BF96696B405}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A74A9B50-0E40-44AD-9360-5BF96696B405}.Release|Any CPU.Build.0 = Release|Any CPU - {A243383E-7025-4893-9611-EE75DA055301}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A243383E-7025-4893-9611-EE75DA055301}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A243383E-7025-4893-9611-EE75DA055301}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A243383E-7025-4893-9611-EE75DA055301}.Release|Any CPU.Build.0 = Release|Any CPU - {86ED8028-5533-4B5D-8594-C09929F2A553}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86ED8028-5533-4B5D-8594-C09929F2A553}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86ED8028-5533-4B5D-8594-C09929F2A553}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86ED8028-5533-4B5D-8594-C09929F2A553}.Release|Any CPU.Build.0 = Release|Any CPU - {A09032AD-D895-4D83-8D3D-67FF3285F7A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A09032AD-D895-4D83-8D3D-67FF3285F7A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A09032AD-D895-4D83-8D3D-67FF3285F7A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A09032AD-D895-4D83-8D3D-67FF3285F7A6}.Release|Any CPU.Build.0 = Release|Any CPU - {59A3A2B8-7992-4321-A481-8C2CD08D0835}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59A3A2B8-7992-4321-A481-8C2CD08D0835}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59A3A2B8-7992-4321-A481-8C2CD08D0835}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59A3A2B8-7992-4321-A481-8C2CD08D0835}.Release|Any CPU.Build.0 = Release|Any CPU - {F9D10E1C-38DC-423D-8B79-BE4673C75B50}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F9D10E1C-38DC-423D-8B79-BE4673C75B50}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F9D10E1C-38DC-423D-8B79-BE4673C75B50}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F9D10E1C-38DC-423D-8B79-BE4673C75B50}.Release|Any CPU.Build.0 = Release|Any CPU - {53479279-0E9C-4921-BEB1-46FDB553C8E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {53479279-0E9C-4921-BEB1-46FDB553C8E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {53479279-0E9C-4921-BEB1-46FDB553C8E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {53479279-0E9C-4921-BEB1-46FDB553C8E2}.Release|Any CPU.Build.0 = Release|Any CPU - {8472D376-D2DB-40C3-AAF9-9ACDF1731919}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8472D376-D2DB-40C3-AAF9-9ACDF1731919}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8472D376-D2DB-40C3-AAF9-9ACDF1731919}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8472D376-D2DB-40C3-AAF9-9ACDF1731919}.Release|Any CPU.Build.0 = Release|Any CPU - {1D7770AA-1669-45CE-88D9-3009C6A48AEE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1D7770AA-1669-45CE-88D9-3009C6A48AEE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1D7770AA-1669-45CE-88D9-3009C6A48AEE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1D7770AA-1669-45CE-88D9-3009C6A48AEE}.Release|Any CPU.Build.0 = Release|Any CPU - {F4ED4FC9-74D5-4379-9787-1F7756B56201}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4ED4FC9-74D5-4379-9787-1F7756B56201}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4ED4FC9-74D5-4379-9787-1F7756B56201}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4ED4FC9-74D5-4379-9787-1F7756B56201}.Release|Any CPU.Build.0 = Release|Any CPU - {F87CA546-1ED2-409A-AD87-62E133BD3EF9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F87CA546-1ED2-409A-AD87-62E133BD3EF9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F87CA546-1ED2-409A-AD87-62E133BD3EF9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F87CA546-1ED2-409A-AD87-62E133BD3EF9}.Release|Any CPU.Build.0 = Release|Any CPU - {2BB68CBB-2220-466B-B24E-6916819DFB79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2BB68CBB-2220-466B-B24E-6916819DFB79}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2BB68CBB-2220-466B-B24E-6916819DFB79}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2BB68CBB-2220-466B-B24E-6916819DFB79}.Release|Any CPU.Build.0 = Release|Any CPU - {ACEFA4C4-4CA8-4358-9B75-3806DF228517}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ACEFA4C4-4CA8-4358-9B75-3806DF228517}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ACEFA4C4-4CA8-4358-9B75-3806DF228517}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ACEFA4C4-4CA8-4358-9B75-3806DF228517}.Release|Any CPU.Build.0 = Release|Any CPU - {AF2F208F-43D6-4296-9826-677681BEC6D4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF2F208F-43D6-4296-9826-677681BEC6D4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF2F208F-43D6-4296-9826-677681BEC6D4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF2F208F-43D6-4296-9826-677681BEC6D4}.Release|Any CPU.Build.0 = Release|Any CPU - {B3F2E786-B28D-444D-9BD9-DD16CBFD38C4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3F2E786-B28D-444D-9BD9-DD16CBFD38C4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3F2E786-B28D-444D-9BD9-DD16CBFD38C4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3F2E786-B28D-444D-9BD9-DD16CBFD38C4}.Release|Any CPU.Build.0 = Release|Any CPU - {7B26E45A-99B1-47EA-9015-7DD78CAFC423}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B26E45A-99B1-47EA-9015-7DD78CAFC423}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B26E45A-99B1-47EA-9015-7DD78CAFC423}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B26E45A-99B1-47EA-9015-7DD78CAFC423}.Release|Any CPU.Build.0 = Release|Any CPU - {F826B05A-2736-4361-ADE5-04B1CF171ED4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F826B05A-2736-4361-ADE5-04B1CF171ED4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F826B05A-2736-4361-ADE5-04B1CF171ED4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F826B05A-2736-4361-ADE5-04B1CF171ED4}.Release|Any CPU.Build.0 = Release|Any CPU - {CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB}.Release|Any CPU.Build.0 = Release|Any CPU - {0E84E1E4-82F8-412B-94F2-E06FF1320B1D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0E84E1E4-82F8-412B-94F2-E06FF1320B1D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0E84E1E4-82F8-412B-94F2-E06FF1320B1D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0E84E1E4-82F8-412B-94F2-E06FF1320B1D}.Release|Any CPU.Build.0 = Release|Any CPU - {C9202B23-45E9-4167-BFAC-89651AF554EB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9202B23-45E9-4167-BFAC-89651AF554EB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9202B23-45E9-4167-BFAC-89651AF554EB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9202B23-45E9-4167-BFAC-89651AF554EB}.Release|Any CPU.Build.0 = Release|Any CPU - {16666C1F-09C1-4829-9AFC-77FB22439A59}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16666C1F-09C1-4829-9AFC-77FB22439A59}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16666C1F-09C1-4829-9AFC-77FB22439A59}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16666C1F-09C1-4829-9AFC-77FB22439A59}.Release|Any CPU.Build.0 = Release|Any CPU - {152DA047-C1BF-4028-B3E7-EF7CEE01AC4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {152DA047-C1BF-4028-B3E7-EF7CEE01AC4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {152DA047-C1BF-4028-B3E7-EF7CEE01AC4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {152DA047-C1BF-4028-B3E7-EF7CEE01AC4E}.Release|Any CPU.Build.0 = Release|Any CPU - {1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45}.Release|Any CPU.Build.0 = Release|Any CPU - {DAFCBF4F-8174-4934-929E-374FBDCE854D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DAFCBF4F-8174-4934-929E-374FBDCE854D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DAFCBF4F-8174-4934-929E-374FBDCE854D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DAFCBF4F-8174-4934-929E-374FBDCE854D}.Release|Any CPU.Build.0 = Release|Any CPU - {CC05C0C9-A0C6-4DFC-863A-6E2778E627EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC05C0C9-A0C6-4DFC-863A-6E2778E627EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC05C0C9-A0C6-4DFC-863A-6E2778E627EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC05C0C9-A0C6-4DFC-863A-6E2778E627EA}.Release|Any CPU.Build.0 = Release|Any CPU - {1C3BCC38-D583-402F-B922-5562F19EA12C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1C3BCC38-D583-402F-B922-5562F19EA12C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1C3BCC38-D583-402F-B922-5562F19EA12C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1C3BCC38-D583-402F-B922-5562F19EA12C}.Release|Any CPU.Build.0 = Release|Any CPU - {00A6598E-8913-47C4-97F7-0E784EA9D55F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00A6598E-8913-47C4-97F7-0E784EA9D55F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00A6598E-8913-47C4-97F7-0E784EA9D55F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00A6598E-8913-47C4-97F7-0E784EA9D55F}.Release|Any CPU.Build.0 = Release|Any CPU - {A8A8A180-C40F-43C7-B6B2-622344CE276B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8A8A180-C40F-43C7-B6B2-622344CE276B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8A8A180-C40F-43C7-B6B2-622344CE276B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8A8A180-C40F-43C7-B6B2-622344CE276B}.Release|Any CPU.Build.0 = Release|Any CPU - {232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7}.Release|Any CPU.Build.0 = Release|Any CPU - {5960FE7B-EC00-4C8D-A522-8FFEC184694D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5960FE7B-EC00-4C8D-A522-8FFEC184694D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5960FE7B-EC00-4C8D-A522-8FFEC184694D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5960FE7B-EC00-4C8D-A522-8FFEC184694D}.Release|Any CPU.Build.0 = Release|Any CPU - {07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A}.Release|Any CPU.Build.0 = Release|Any CPU - {6A79337A-879F-4A9F-8328-5578E40177B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A79337A-879F-4A9F-8328-5578E40177B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A79337A-879F-4A9F-8328-5578E40177B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A79337A-879F-4A9F-8328-5578E40177B5}.Release|Any CPU.Build.0 = Release|Any CPU - {233C2407-3ED3-4322-B28D-0F93CF4C6E33}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {233C2407-3ED3-4322-B28D-0F93CF4C6E33}.Debug|Any CPU.Build.0 = Debug|Any CPU - {233C2407-3ED3-4322-B28D-0F93CF4C6E33}.Release|Any CPU.ActiveCfg = Release|Any CPU - {233C2407-3ED3-4322-B28D-0F93CF4C6E33}.Release|Any CPU.Build.0 = Release|Any CPU - {118D91CE-091B-4C65-8979-2F5363C56CDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {118D91CE-091B-4C65-8979-2F5363C56CDC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {118D91CE-091B-4C65-8979-2F5363C56CDC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {118D91CE-091B-4C65-8979-2F5363C56CDC}.Release|Any CPU.Build.0 = Release|Any CPU - {3EF74657-9EBC-46FD-B2CA-40959D0EE692}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EF74657-9EBC-46FD-B2CA-40959D0EE692}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EF74657-9EBC-46FD-B2CA-40959D0EE692}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EF74657-9EBC-46FD-B2CA-40959D0EE692}.Release|Any CPU.Build.0 = Release|Any CPU - {03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD}.Release|Any CPU.Build.0 = Release|Any CPU - {A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2}.Release|Any CPU.Build.0 = Release|Any CPU - {A788317B-1649-4D26-AB6C-6AA5B35767DA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A788317B-1649-4D26-AB6C-6AA5B35767DA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A788317B-1649-4D26-AB6C-6AA5B35767DA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A788317B-1649-4D26-AB6C-6AA5B35767DA}.Release|Any CPU.Build.0 = Release|Any CPU - {BD990314-682C-4BF1-A1B3-A0A0E37AAEB2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BD990314-682C-4BF1-A1B3-A0A0E37AAEB2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BD990314-682C-4BF1-A1B3-A0A0E37AAEB2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BD990314-682C-4BF1-A1B3-A0A0E37AAEB2}.Release|Any CPU.Build.0 = Release|Any CPU - {C027362E-9B72-4058-91DF-D7F0FDD162AA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C027362E-9B72-4058-91DF-D7F0FDD162AA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C027362E-9B72-4058-91DF-D7F0FDD162AA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C027362E-9B72-4058-91DF-D7F0FDD162AA}.Release|Any CPU.Build.0 = Release|Any CPU - {4EFA5940-881E-4A32-BF8C-D15FF74DFB0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4EFA5940-881E-4A32-BF8C-D15FF74DFB0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4EFA5940-881E-4A32-BF8C-D15FF74DFB0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4EFA5940-881E-4A32-BF8C-D15FF74DFB0E}.Release|Any CPU.Build.0 = Release|Any CPU - {0E0683C3-5169-4965-A886-D960811E1807}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0E0683C3-5169-4965-A886-D960811E1807}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0E0683C3-5169-4965-A886-D960811E1807}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0E0683C3-5169-4965-A886-D960811E1807}.Release|Any CPU.Build.0 = Release|Any CPU - {8011A4C4-F08C-463D-A376-F33A7F780F57}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8011A4C4-F08C-463D-A376-F33A7F780F57}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8011A4C4-F08C-463D-A376-F33A7F780F57}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8011A4C4-F08C-463D-A376-F33A7F780F57}.Release|Any CPU.Build.0 = Release|Any CPU - {78767BC5-FE68-4919-BC1B-DE7FF71F294B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {78767BC5-FE68-4919-BC1B-DE7FF71F294B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {78767BC5-FE68-4919-BC1B-DE7FF71F294B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {78767BC5-FE68-4919-BC1B-DE7FF71F294B}.Release|Any CPU.Build.0 = Release|Any CPU - {8F29FD0D-D84C-4374-9BE1-02D7FA99E10E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8F29FD0D-D84C-4374-9BE1-02D7FA99E10E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F29FD0D-D84C-4374-9BE1-02D7FA99E10E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8F29FD0D-D84C-4374-9BE1-02D7FA99E10E}.Release|Any CPU.Build.0 = Release|Any CPU - {9697AB9A-2ACA-42E5-877E-EEF371166898}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9697AB9A-2ACA-42E5-877E-EEF371166898}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9697AB9A-2ACA-42E5-877E-EEF371166898}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9697AB9A-2ACA-42E5-877E-EEF371166898}.Release|Any CPU.Build.0 = Release|Any CPU - {76A4D1FD-479A-4C57-96E0-BBFCCBADB683}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76A4D1FD-479A-4C57-96E0-BBFCCBADB683}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76A4D1FD-479A-4C57-96E0-BBFCCBADB683}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76A4D1FD-479A-4C57-96E0-BBFCCBADB683}.Release|Any CPU.Build.0 = Release|Any CPU - {E4C02147-34FA-43D1-B03C-00D539CF18BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4C02147-34FA-43D1-B03C-00D539CF18BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4C02147-34FA-43D1-B03C-00D539CF18BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4C02147-34FA-43D1-B03C-00D539CF18BC}.Release|Any CPU.Build.0 = Release|Any CPU - {AABB5ABC-790E-48D1-B654-72143227FA64}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AABB5ABC-790E-48D1-B654-72143227FA64}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AABB5ABC-790E-48D1-B654-72143227FA64}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AABB5ABC-790E-48D1-B654-72143227FA64}.Release|Any CPU.Build.0 = Release|Any CPU - {CA5E2785-511D-4A14-8883-2544C869B2DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA5E2785-511D-4A14-8883-2544C869B2DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA5E2785-511D-4A14-8883-2544C869B2DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA5E2785-511D-4A14-8883-2544C869B2DF}.Release|Any CPU.Build.0 = Release|Any CPU - {AB897095-EA92-4AD9-829C-66FEE1878A5D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB897095-EA92-4AD9-829C-66FEE1878A5D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB897095-EA92-4AD9-829C-66FEE1878A5D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB897095-EA92-4AD9-829C-66FEE1878A5D}.Release|Any CPU.Build.0 = Release|Any CPU - {1FA05CCA-0584-4320-B278-D5AA1234BA02}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1FA05CCA-0584-4320-B278-D5AA1234BA02}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1FA05CCA-0584-4320-B278-D5AA1234BA02}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1FA05CCA-0584-4320-B278-D5AA1234BA02}.Release|Any CPU.Build.0 = Release|Any CPU - {7B6A98B3-90C1-49F2-8A17-C70FED500627}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7B6A98B3-90C1-49F2-8A17-C70FED500627}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7B6A98B3-90C1-49F2-8A17-C70FED500627}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7B6A98B3-90C1-49F2-8A17-C70FED500627}.Release|Any CPU.Build.0 = Release|Any CPU - {1F404E43-FA13-485D-B922-7D8848EBCE0F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1F404E43-FA13-485D-B922-7D8848EBCE0F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1F404E43-FA13-485D-B922-7D8848EBCE0F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1F404E43-FA13-485D-B922-7D8848EBCE0F}.Release|Any CPU.Build.0 = Release|Any CPU - {2230E355-50F7-424F-929F-532B0A5DABE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2230E355-50F7-424F-929F-532B0A5DABE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2230E355-50F7-424F-929F-532B0A5DABE0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2230E355-50F7-424F-929F-532B0A5DABE0}.Release|Any CPU.Build.0 = Release|Any CPU - {FBCDC571-F747-46AB-AFCB-38D191DCFFB6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FBCDC571-F747-46AB-AFCB-38D191DCFFB6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FBCDC571-F747-46AB-AFCB-38D191DCFFB6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FBCDC571-F747-46AB-AFCB-38D191DCFFB6}.Release|Any CPU.Build.0 = Release|Any CPU - {83D2F8F2-82C7-4919-9B65-D0FBF0B5324C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83D2F8F2-82C7-4919-9B65-D0FBF0B5324C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83D2F8F2-82C7-4919-9B65-D0FBF0B5324C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83D2F8F2-82C7-4919-9B65-D0FBF0B5324C}.Release|Any CPU.Build.0 = Release|Any CPU - {CAEF3248-527D-48B7-9C98-929AC573C381}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAEF3248-527D-48B7-9C98-929AC573C381}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAEF3248-527D-48B7-9C98-929AC573C381}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAEF3248-527D-48B7-9C98-929AC573C381}.Release|Any CPU.Build.0 = Release|Any CPU - {209E7129-4B39-4768-A0D6-797F796E4FCE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {209E7129-4B39-4768-A0D6-797F796E4FCE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {209E7129-4B39-4768-A0D6-797F796E4FCE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {209E7129-4B39-4768-A0D6-797F796E4FCE}.Release|Any CPU.Build.0 = Release|Any CPU - {D67EBE62-C541-45E4-957E-D1D11BE74F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D67EBE62-C541-45E4-957E-D1D11BE74F68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D67EBE62-C541-45E4-957E-D1D11BE74F68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D67EBE62-C541-45E4-957E-D1D11BE74F68}.Release|Any CPU.Build.0 = Release|Any CPU - {7623D363-F0BD-400C-B8AB-3FD9699D92D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7623D363-F0BD-400C-B8AB-3FD9699D92D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7623D363-F0BD-400C-B8AB-3FD9699D92D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7623D363-F0BD-400C-B8AB-3FD9699D92D9}.Release|Any CPU.Build.0 = Release|Any CPU - {E2BA59EA-769B-4D5B-8032-CB9682D0D73A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2BA59EA-769B-4D5B-8032-CB9682D0D73A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2BA59EA-769B-4D5B-8032-CB9682D0D73A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2BA59EA-769B-4D5B-8032-CB9682D0D73A}.Release|Any CPU.Build.0 = Release|Any CPU - {5F0926F3-463D-445B-9746-0A037DC431F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F0926F3-463D-445B-9746-0A037DC431F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F0926F3-463D-445B-9746-0A037DC431F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F0926F3-463D-445B-9746-0A037DC431F9}.Release|Any CPU.Build.0 = Release|Any CPU - {21878B72-9801-41CE-88CD-7195714AE9BA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {21878B72-9801-41CE-88CD-7195714AE9BA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {21878B72-9801-41CE-88CD-7195714AE9BA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {21878B72-9801-41CE-88CD-7195714AE9BA}.Release|Any CPU.Build.0 = Release|Any CPU - {2263600B-30CB-4188-925D-92F12F904163}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2263600B-30CB-4188-925D-92F12F904163}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2263600B-30CB-4188-925D-92F12F904163}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2263600B-30CB-4188-925D-92F12F904163}.Release|Any CPU.Build.0 = Release|Any CPU - {2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E}.Release|Any CPU.Build.0 = Release|Any CPU - {C1023A56-87CE-4227-8F0E-0F9DAA1E20B8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C1023A56-87CE-4227-8F0E-0F9DAA1E20B8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C1023A56-87CE-4227-8F0E-0F9DAA1E20B8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C1023A56-87CE-4227-8F0E-0F9DAA1E20B8}.Release|Any CPU.Build.0 = Release|Any CPU - {FAD86432-6A95-47DE-8E3A-FC2101753C52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FAD86432-6A95-47DE-8E3A-FC2101753C52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FAD86432-6A95-47DE-8E3A-FC2101753C52}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FAD86432-6A95-47DE-8E3A-FC2101753C52}.Release|Any CPU.Build.0 = Release|Any CPU - {5F278E32-3A2A-4654-BD3C-B183301382FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5F278E32-3A2A-4654-BD3C-B183301382FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5F278E32-3A2A-4654-BD3C-B183301382FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5F278E32-3A2A-4654-BD3C-B183301382FB}.Release|Any CPU.Build.0 = Release|Any CPU - {1DB57C74-1C40-4414-B968-937C3C1C157E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1DB57C74-1C40-4414-B968-937C3C1C157E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1DB57C74-1C40-4414-B968-937C3C1C157E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1DB57C74-1C40-4414-B968-937C3C1C157E}.Release|Any CPU.Build.0 = Release|Any CPU - {F10EB725-5A50-4C80-B8D1-88C7BE23D5A9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F10EB725-5A50-4C80-B8D1-88C7BE23D5A9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F10EB725-5A50-4C80-B8D1-88C7BE23D5A9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F10EB725-5A50-4C80-B8D1-88C7BE23D5A9}.Release|Any CPU.Build.0 = Release|Any CPU - {C4D3B4CA-6631-4447-9D89-A535305E581A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4D3B4CA-6631-4447-9D89-A535305E581A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4D3B4CA-6631-4447-9D89-A535305E581A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4D3B4CA-6631-4447-9D89-A535305E581A}.Release|Any CPU.Build.0 = Release|Any CPU - {18FCB763-1EFF-47DF-ACED-98B7F994FD10}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18FCB763-1EFF-47DF-ACED-98B7F994FD10}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18FCB763-1EFF-47DF-ACED-98B7F994FD10}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18FCB763-1EFF-47DF-ACED-98B7F994FD10}.Release|Any CPU.Build.0 = Release|Any CPU - {3B5EB3D6-08FD-490C-BC70-805B199A0333}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B5EB3D6-08FD-490C-BC70-805B199A0333}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B5EB3D6-08FD-490C-BC70-805B199A0333}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B5EB3D6-08FD-490C-BC70-805B199A0333}.Release|Any CPU.Build.0 = Release|Any CPU - {28422FE4-8D58-4D8A-8363-7A9D569A5695}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28422FE4-8D58-4D8A-8363-7A9D569A5695}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28422FE4-8D58-4D8A-8363-7A9D569A5695}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28422FE4-8D58-4D8A-8363-7A9D569A5695}.Release|Any CPU.Build.0 = Release|Any CPU - {B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5}.Release|Any CPU.Build.0 = Release|Any CPU - {90C71347-89E2-4546-9A64-FE56F6A48E13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90C71347-89E2-4546-9A64-FE56F6A48E13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90C71347-89E2-4546-9A64-FE56F6A48E13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90C71347-89E2-4546-9A64-FE56F6A48E13}.Release|Any CPU.Build.0 = Release|Any CPU - {93B1913D-41B8-4FAB-8472-4BE03F4DC03C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93B1913D-41B8-4FAB-8472-4BE03F4DC03C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93B1913D-41B8-4FAB-8472-4BE03F4DC03C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93B1913D-41B8-4FAB-8472-4BE03F4DC03C}.Release|Any CPU.Build.0 = Release|Any CPU - {6FA91938-03AB-41B0-9A80-14AE550D745E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6FA91938-03AB-41B0-9A80-14AE550D745E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6FA91938-03AB-41B0-9A80-14AE550D745E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6FA91938-03AB-41B0-9A80-14AE550D745E}.Release|Any CPU.Build.0 = Release|Any CPU - {838A6EB6-BCD4-498E-A729-6875F4A6EDF1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {838A6EB6-BCD4-498E-A729-6875F4A6EDF1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {838A6EB6-BCD4-498E-A729-6875F4A6EDF1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {838A6EB6-BCD4-498E-A729-6875F4A6EDF1}.Release|Any CPU.Build.0 = Release|Any CPU - {EA9F69A2-ACCF-477B-9519-257CF47DC0F4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EA9F69A2-ACCF-477B-9519-257CF47DC0F4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EA9F69A2-ACCF-477B-9519-257CF47DC0F4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EA9F69A2-ACCF-477B-9519-257CF47DC0F4}.Release|Any CPU.Build.0 = Release|Any CPU - {7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075}.Release|Any CPU.Build.0 = Release|Any CPU - {3DFAECE7-496B-4E86-A23F-5F9A597D1119}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3DFAECE7-496B-4E86-A23F-5F9A597D1119}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3DFAECE7-496B-4E86-A23F-5F9A597D1119}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3DFAECE7-496B-4E86-A23F-5F9A597D1119}.Release|Any CPU.Build.0 = Release|Any CPU - {3690518A-D6C3-42CC-AEC2-6D48C6987F68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3690518A-D6C3-42CC-AEC2-6D48C6987F68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3690518A-D6C3-42CC-AEC2-6D48C6987F68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3690518A-D6C3-42CC-AEC2-6D48C6987F68}.Release|Any CPU.Build.0 = Release|Any CPU - {0D34162C-0CE3-4D7B-B19A-4786C616D0B3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0D34162C-0CE3-4D7B-B19A-4786C616D0B3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0D34162C-0CE3-4D7B-B19A-4786C616D0B3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0D34162C-0CE3-4D7B-B19A-4786C616D0B3}.Release|Any CPU.Build.0 = Release|Any CPU - {FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE}.Release|Any CPU.Build.0 = Release|Any CPU - {B7F866FF-8C8F-4C7D-9084-E0C206F1F26F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B7F866FF-8C8F-4C7D-9084-E0C206F1F26F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B7F866FF-8C8F-4C7D-9084-E0C206F1F26F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B7F866FF-8C8F-4C7D-9084-E0C206F1F26F}.Release|Any CPU.Build.0 = Release|Any CPU - {E957DB2E-589D-4310-9576-92F108A67CE7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E957DB2E-589D-4310-9576-92F108A67CE7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E957DB2E-589D-4310-9576-92F108A67CE7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E957DB2E-589D-4310-9576-92F108A67CE7}.Release|Any CPU.Build.0 = Release|Any CPU - {4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A}.Release|Any CPU.Build.0 = Release|Any CPU - {C4690A20-8628-4A39-8E71-2D09800D0E72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4690A20-8628-4A39-8E71-2D09800D0E72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4690A20-8628-4A39-8E71-2D09800D0E72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4690A20-8628-4A39-8E71-2D09800D0E72}.Release|Any CPU.Build.0 = Release|Any CPU - {8233A44F-4DFC-4701-9C04-834FD3C97060}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8233A44F-4DFC-4701-9C04-834FD3C97060}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8233A44F-4DFC-4701-9C04-834FD3C97060}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8233A44F-4DFC-4701-9C04-834FD3C97060}.Release|Any CPU.Build.0 = Release|Any CPU - {66A6E78D-E547-4DD7-9844-087FAB3D03C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {66A6E78D-E547-4DD7-9844-087FAB3D03C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {66A6E78D-E547-4DD7-9844-087FAB3D03C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {66A6E78D-E547-4DD7-9844-087FAB3D03C2}.Release|Any CPU.Build.0 = Release|Any CPU - {A99F5406-37DC-4677-9166-9BDE90C26CA6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A99F5406-37DC-4677-9166-9BDE90C26CA6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A99F5406-37DC-4677-9166-9BDE90C26CA6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A99F5406-37DC-4677-9166-9BDE90C26CA6}.Release|Any CPU.Build.0 = Release|Any CPU - {8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3}.Release|Any CPU.Build.0 = Release|Any CPU - {7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F}.Release|Any CPU.Build.0 = Release|Any CPU - {986B92F6-A758-4D1F-8BC7-BFD13FF38591}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {986B92F6-A758-4D1F-8BC7-BFD13FF38591}.Debug|Any CPU.Build.0 = Debug|Any CPU - {986B92F6-A758-4D1F-8BC7-BFD13FF38591}.Release|Any CPU.ActiveCfg = Release|Any CPU - {986B92F6-A758-4D1F-8BC7-BFD13FF38591}.Release|Any CPU.Build.0 = Release|Any CPU - {62D72C3E-5C57-439D-B7F7-5C55CC384A7A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62D72C3E-5C57-439D-B7F7-5C55CC384A7A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62D72C3E-5C57-439D-B7F7-5C55CC384A7A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62D72C3E-5C57-439D-B7F7-5C55CC384A7A}.Release|Any CPU.Build.0 = Release|Any CPU - {74156CFF-C236-4DED-B810-FAD8948F51CA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74156CFF-C236-4DED-B810-FAD8948F51CA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74156CFF-C236-4DED-B810-FAD8948F51CA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74156CFF-C236-4DED-B810-FAD8948F51CA}.Release|Any CPU.Build.0 = Release|Any CPU - {63D08153-B43C-4884-8818-4AB42E1FEE75}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {63D08153-B43C-4884-8818-4AB42E1FEE75}.Debug|Any CPU.Build.0 = Debug|Any CPU - {63D08153-B43C-4884-8818-4AB42E1FEE75}.Release|Any CPU.ActiveCfg = Release|Any CPU - {63D08153-B43C-4884-8818-4AB42E1FEE75}.Release|Any CPU.Build.0 = Release|Any CPU - {AF02868C-283E-4CB2-8866-3B0CAD1BB2DE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF02868C-283E-4CB2-8866-3B0CAD1BB2DE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF02868C-283E-4CB2-8866-3B0CAD1BB2DE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF02868C-283E-4CB2-8866-3B0CAD1BB2DE}.Release|Any CPU.Build.0 = Release|Any CPU - {F7459720-873C-4741-A991-A671CF03A6AF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F7459720-873C-4741-A991-A671CF03A6AF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F7459720-873C-4741-A991-A671CF03A6AF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F7459720-873C-4741-A991-A671CF03A6AF}.Release|Any CPU.Build.0 = Release|Any CPU - {382CAC43-EE1F-4DA3-B433-E23C3F58F44A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {382CAC43-EE1F-4DA3-B433-E23C3F58F44A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {382CAC43-EE1F-4DA3-B433-E23C3F58F44A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {382CAC43-EE1F-4DA3-B433-E23C3F58F44A}.Release|Any CPU.Build.0 = Release|Any CPU - {4634B421-36E6-4169-AA1A-11050902495F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4634B421-36E6-4169-AA1A-11050902495F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4634B421-36E6-4169-AA1A-11050902495F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4634B421-36E6-4169-AA1A-11050902495F}.Release|Any CPU.Build.0 = Release|Any CPU - {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB2DF96A-6ED8-4F47-948C-230EA2065C4C}.Release|Any CPU.Build.0 = Release|Any CPU - {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB80C55F-8B70-4840-942A-ED021ED88BD6}.Release|Any CPU.Build.0 = Release|Any CPU - {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26}.Release|Any CPU.Build.0 = Release|Any CPU - {DA54E88E-C43E-4E31-92D0-08A753F2C08D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA54E88E-C43E-4E31-92D0-08A753F2C08D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA54E88E-C43E-4E31-92D0-08A753F2C08D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA54E88E-C43E-4E31-92D0-08A753F2C08D}.Release|Any CPU.Build.0 = Release|Any CPU - {A7417E7F-DB97-48DB-B849-AFC15854A6E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A7417E7F-DB97-48DB-B849-AFC15854A6E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A7417E7F-DB97-48DB-B849-AFC15854A6E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A7417E7F-DB97-48DB-B849-AFC15854A6E7}.Release|Any CPU.Build.0 = Release|Any CPU - {8DDE4291-BC57-4C56-9871-B982462F4C3D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8DDE4291-BC57-4C56-9871-B982462F4C3D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8DDE4291-BC57-4C56-9871-B982462F4C3D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8DDE4291-BC57-4C56-9871-B982462F4C3D}.Release|Any CPU.Build.0 = Release|Any CPU - {C5D64A2B-7E7E-4509-9F31-425D59712E6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C5D64A2B-7E7E-4509-9F31-425D59712E6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C5D64A2B-7E7E-4509-9F31-425D59712E6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C5D64A2B-7E7E-4509-9F31-425D59712E6F}.Release|Any CPU.Build.0 = Release|Any CPU - {A52C54FB-C96D-4032-8588-AFC2CD158D23}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A52C54FB-C96D-4032-8588-AFC2CD158D23}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A52C54FB-C96D-4032-8588-AFC2CD158D23}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A52C54FB-C96D-4032-8588-AFC2CD158D23}.Release|Any CPU.Build.0 = Release|Any CPU - {B05ED61E-9A36-4E90-B876-F48559E018A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B05ED61E-9A36-4E90-B876-F48559E018A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B05ED61E-9A36-4E90-B876-F48559E018A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B05ED61E-9A36-4E90-B876-F48559E018A6}.Release|Any CPU.Build.0 = Release|Any CPU - {1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7}.Release|Any CPU.Build.0 = Release|Any CPU - {9D2C789C-8241-4F53-AFEF-F2AB15BAA823}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D2C789C-8241-4F53-AFEF-F2AB15BAA823}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D2C789C-8241-4F53-AFEF-F2AB15BAA823}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D2C789C-8241-4F53-AFEF-F2AB15BAA823}.Release|Any CPU.Build.0 = Release|Any CPU - {36AEA095-E34D-43F5-8000-9FA3A696C312}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36AEA095-E34D-43F5-8000-9FA3A696C312}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36AEA095-E34D-43F5-8000-9FA3A696C312}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36AEA095-E34D-43F5-8000-9FA3A696C312}.Release|Any CPU.Build.0 = Release|Any CPU - {2D5A9AB0-9F32-4784-8972-814F86C0239D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2D5A9AB0-9F32-4784-8972-814F86C0239D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2D5A9AB0-9F32-4784-8972-814F86C0239D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2D5A9AB0-9F32-4784-8972-814F86C0239D}.Release|Any CPU.Build.0 = Release|Any CPU - {A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB}.Release|Any CPU.Build.0 = Release|Any CPU - {AF15C829-9288-4D7F-95A0-4EA8DF909929}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AF15C829-9288-4D7F-95A0-4EA8DF909929}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AF15C829-9288-4D7F-95A0-4EA8DF909929}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AF15C829-9288-4D7F-95A0-4EA8DF909929}.Release|Any CPU.Build.0 = Release|Any CPU - {616652A5-A420-475C-AC9F-FC687E3C768B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {616652A5-A420-475C-AC9F-FC687E3C768B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {616652A5-A420-475C-AC9F-FC687E3C768B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {616652A5-A420-475C-AC9F-FC687E3C768B}.Release|Any CPU.Build.0 = Release|Any CPU - {D736C433-C230-46B7-9D43-17D0282EBBDF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D736C433-C230-46B7-9D43-17D0282EBBDF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D736C433-C230-46B7-9D43-17D0282EBBDF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D736C433-C230-46B7-9D43-17D0282EBBDF}.Release|Any CPU.Build.0 = Release|Any CPU - {FA525A71-C0BF-49FB-BAB7-547944618587}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA525A71-C0BF-49FB-BAB7-547944618587}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA525A71-C0BF-49FB-BAB7-547944618587}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA525A71-C0BF-49FB-BAB7-547944618587}.Release|Any CPU.Build.0 = Release|Any CPU - {532D5703-0090-4F2E-B725-5786D53506C9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {532D5703-0090-4F2E-B725-5786D53506C9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {532D5703-0090-4F2E-B725-5786D53506C9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {532D5703-0090-4F2E-B725-5786D53506C9}.Release|Any CPU.Build.0 = Release|Any CPU - {E538580B-A21F-4B3B-9CB4-741FE8C1C6EF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E538580B-A21F-4B3B-9CB4-741FE8C1C6EF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E538580B-A21F-4B3B-9CB4-741FE8C1C6EF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E538580B-A21F-4B3B-9CB4-741FE8C1C6EF}.Release|Any CPU.Build.0 = Release|Any CPU - {71CF0E82-FA07-472A-B32A-AC25EDA82BB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {71CF0E82-FA07-472A-B32A-AC25EDA82BB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {71CF0E82-FA07-472A-B32A-AC25EDA82BB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {71CF0E82-FA07-472A-B32A-AC25EDA82BB0}.Release|Any CPU.Build.0 = Release|Any CPU - {77965572-373C-4319-9EF9-73D6E660044B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77965572-373C-4319-9EF9-73D6E660044B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77965572-373C-4319-9EF9-73D6E660044B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77965572-373C-4319-9EF9-73D6E660044B}.Release|Any CPU.Build.0 = Release|Any CPU - {A3924A79-1ADC-458D-8764-3958297BDEB0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3924A79-1ADC-458D-8764-3958297BDEB0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3924A79-1ADC-458D-8764-3958297BDEB0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3924A79-1ADC-458D-8764-3958297BDEB0}.Release|Any CPU.Build.0 = Release|Any CPU - {38A933EB-82F1-42A6-ABF3-F55975B4078E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {38A933EB-82F1-42A6-ABF3-F55975B4078E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {38A933EB-82F1-42A6-ABF3-F55975B4078E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {38A933EB-82F1-42A6-ABF3-F55975B4078E}.Release|Any CPU.Build.0 = Release|Any CPU - {03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65}.Release|Any CPU.Build.0 = Release|Any CPU - {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69}.Release|Any CPU.Build.0 = Release|Any CPU - {319428B9-CE7F-4027-92FA-6311C4CE95FB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {319428B9-CE7F-4027-92FA-6311C4CE95FB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {319428B9-CE7F-4027-92FA-6311C4CE95FB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {319428B9-CE7F-4027-92FA-6311C4CE95FB}.Release|Any CPU.Build.0 = Release|Any CPU - {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9AE3E97E-8846-4315-9546-FF97E97FD49F}.Release|Any CPU.Build.0 = Release|Any CPU - {BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BC7A8662-4313-4F1D-B267-9B1B69444CD3}.Release|Any CPU.Build.0 = Release|Any CPU - {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4539FCDB-7192-442C-BD9B-0AC71E882F4F}.Release|Any CPU.Build.0 = Release|Any CPU - {30EEF879-CFF7-4661-89CB-9CB68328D008}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {30EEF879-CFF7-4661-89CB-9CB68328D008}.Debug|Any CPU.Build.0 = Debug|Any CPU - {30EEF879-CFF7-4661-89CB-9CB68328D008}.Release|Any CPU.ActiveCfg = Release|Any CPU - {30EEF879-CFF7-4661-89CB-9CB68328D008}.Release|Any CPU.Build.0 = Release|Any CPU - {37740138-D088-46F5-83A8-8A8180FE65D8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37740138-D088-46F5-83A8-8A8180FE65D8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37740138-D088-46F5-83A8-8A8180FE65D8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37740138-D088-46F5-83A8-8A8180FE65D8}.Release|Any CPU.Build.0 = Release|Any CPU - {5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C}.Release|Any CPU.Build.0 = Release|Any CPU - {77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE}.Release|Any CPU.Build.0 = Release|Any CPU - {746813A9-4221-42D8-AAB5-66CB69EC844F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {746813A9-4221-42D8-AAB5-66CB69EC844F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {746813A9-4221-42D8-AAB5-66CB69EC844F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {746813A9-4221-42D8-AAB5-66CB69EC844F}.Release|Any CPU.Build.0 = Release|Any CPU - {15106D95-EE9A-4C9D-AB12-41FBE46A9A89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {15106D95-EE9A-4C9D-AB12-41FBE46A9A89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {15106D95-EE9A-4C9D-AB12-41FBE46A9A89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {15106D95-EE9A-4C9D-AB12-41FBE46A9A89}.Release|Any CPU.Build.0 = Release|Any CPU - {EB3EC78D-CD1C-423F-B866-74E0DC8D429D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EB3EC78D-CD1C-423F-B866-74E0DC8D429D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EB3EC78D-CD1C-423F-B866-74E0DC8D429D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EB3EC78D-CD1C-423F-B866-74E0DC8D429D}.Release|Any CPU.Build.0 = Release|Any CPU - {C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01}.Release|Any CPU.Build.0 = Release|Any CPU - {FCD95DCE-9DF4-403C-966C-FF19ADD2EA43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCD95DCE-9DF4-403C-966C-FF19ADD2EA43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCD95DCE-9DF4-403C-966C-FF19ADD2EA43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCD95DCE-9DF4-403C-966C-FF19ADD2EA43}.Release|Any CPU.Build.0 = Release|Any CPU - {A31C7F96-3AC6-44AF-B505-7D900C945291}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A31C7F96-3AC6-44AF-B505-7D900C945291}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A31C7F96-3AC6-44AF-B505-7D900C945291}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A31C7F96-3AC6-44AF-B505-7D900C945291}.Release|Any CPU.Build.0 = Release|Any CPU - {6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3}.Release|Any CPU.Build.0 = Release|Any CPU - {9D357D4C-532A-4ADC-9CCB-C95B4E033547}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D357D4C-532A-4ADC-9CCB-C95B4E033547}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D357D4C-532A-4ADC-9CCB-C95B4E033547}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D357D4C-532A-4ADC-9CCB-C95B4E033547}.Release|Any CPU.Build.0 = Release|Any CPU - {C33DBB02-F788-4EE0-ABDD-22861FC40D79}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C33DBB02-F788-4EE0-ABDD-22861FC40D79}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C33DBB02-F788-4EE0-ABDD-22861FC40D79}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C33DBB02-F788-4EE0-ABDD-22861FC40D79}.Release|Any CPU.Build.0 = Release|Any CPU - {E115487D-AAEF-4623-832B-94C14C79E991}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E115487D-AAEF-4623-832B-94C14C79E991}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E115487D-AAEF-4623-832B-94C14C79E991}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E115487D-AAEF-4623-832B-94C14C79E991}.Release|Any CPU.Build.0 = Release|Any CPU - {67B2403C-FFC8-47C7-BD71-A9D730430024}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {67B2403C-FFC8-47C7-BD71-A9D730430024}.Debug|Any CPU.Build.0 = Debug|Any CPU - {67B2403C-FFC8-47C7-BD71-A9D730430024}.Release|Any CPU.ActiveCfg = Release|Any CPU - {67B2403C-FFC8-47C7-BD71-A9D730430024}.Release|Any CPU.Build.0 = Release|Any CPU - {DA42E464-C824-461C-8D17-14FC2B293F65}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DA42E464-C824-461C-8D17-14FC2B293F65}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DA42E464-C824-461C-8D17-14FC2B293F65}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DA42E464-C824-461C-8D17-14FC2B293F65}.Release|Any CPU.Build.0 = Release|Any CPU - {CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409}.Release|Any CPU.Build.0 = Release|Any CPU - {57C95347-CF48-43DD-BFC9-597A43041AC5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57C95347-CF48-43DD-BFC9-597A43041AC5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57C95347-CF48-43DD-BFC9-597A43041AC5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57C95347-CF48-43DD-BFC9-597A43041AC5}.Release|Any CPU.Build.0 = Release|Any CPU - {06FC3141-5F92-43A6-94C9-E2519EE9A91E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06FC3141-5F92-43A6-94C9-E2519EE9A91E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06FC3141-5F92-43A6-94C9-E2519EE9A91E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06FC3141-5F92-43A6-94C9-E2519EE9A91E}.Release|Any CPU.Build.0 = Release|Any CPU - {4E3CE014-38BF-FF33-A107-B268E57CE8E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4E3CE014-38BF-FF33-A107-B268E57CE8E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4E3CE014-38BF-FF33-A107-B268E57CE8E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4E3CE014-38BF-FF33-A107-B268E57CE8E9}.Release|Any CPU.Build.0 = Release|Any CPU - {57A61286-DE14-9313-5BAB-B077C6239377}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57A61286-DE14-9313-5BAB-B077C6239377}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57A61286-DE14-9313-5BAB-B077C6239377}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57A61286-DE14-9313-5BAB-B077C6239377}.Release|Any CPU.Build.0 = Release|Any CPU - {44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3}.Release|Any CPU.Build.0 = Release|Any CPU - {B080B644-A835-42EE-EBF5-C47B6D075588}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B080B644-A835-42EE-EBF5-C47B6D075588}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B080B644-A835-42EE-EBF5-C47B6D075588}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B080B644-A835-42EE-EBF5-C47B6D075588}.Release|Any CPU.Build.0 = Release|Any CPU - {170F4C72-BED2-C77A-64B0-F4CB9A232026}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {170F4C72-BED2-C77A-64B0-F4CB9A232026}.Debug|Any CPU.Build.0 = Debug|Any CPU - {170F4C72-BED2-C77A-64B0-F4CB9A232026}.Release|Any CPU.ActiveCfg = Release|Any CPU - {170F4C72-BED2-C77A-64B0-F4CB9A232026}.Release|Any CPU.Build.0 = Release|Any CPU - {00868838-6891-B034-AAB7-AADAA3ECDCB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00868838-6891-B034-AAB7-AADAA3ECDCB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00868838-6891-B034-AAB7-AADAA3ECDCB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00868838-6891-B034-AAB7-AADAA3ECDCB3}.Release|Any CPU.Build.0 = Release|Any CPU - {E40CB92D-6C03-4A61-9A47-057CA504A46B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E40CB92D-6C03-4A61-9A47-057CA504A46B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E40CB92D-6C03-4A61-9A47-057CA504A46B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E40CB92D-6C03-4A61-9A47-057CA504A46B}.Release|Any CPU.Build.0 = Release|Any CPU - {4C7594CE-FB2F-4309-B95C-D4460892CF6E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C7594CE-FB2F-4309-B95C-D4460892CF6E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C7594CE-FB2F-4309-B95C-D4460892CF6E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C7594CE-FB2F-4309-B95C-D4460892CF6E}.Release|Any CPU.Build.0 = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9266D5D-3860-09C3-F566-489BBB57A534}.Release|Any CPU.Build.0 = Release|Any CPU - {40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E}.Release|Any CPU.Build.0 = Release|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Release|Any CPU.Build.0 = Release|Any CPU - {32F0884D-DA64-4659-AEB7-2717B977855F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {32F0884D-DA64-4659-AEB7-2717B977855F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {32F0884D-DA64-4659-AEB7-2717B977855F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {32F0884D-DA64-4659-AEB7-2717B977855F}.Release|Any CPU.Build.0 = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.Build.0 = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.Build.0 = Release|Any CPU - {2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A}.Release|Any CPU.Build.0 = Release|Any CPU - {311C3A82-3B01-79BD-F9C5-FCC2549A9A8D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {311C3A82-3B01-79BD-F9C5-FCC2549A9A8D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {311C3A82-3B01-79BD-F9C5-FCC2549A9A8D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {311C3A82-3B01-79BD-F9C5-FCC2549A9A8D}.Release|Any CPU.Build.0 = Release|Any CPU - {F2A31684-7A38-B77D-CCAA-C21B9A8B45CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2A31684-7A38-B77D-CCAA-C21B9A8B45CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2A31684-7A38-B77D-CCAA-C21B9A8B45CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2A31684-7A38-B77D-CCAA-C21B9A8B45CF}.Release|Any CPU.Build.0 = Release|Any CPU - {77DFF548-13F4-9FE9-930B-B7642FF722A6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {77DFF548-13F4-9FE9-930B-B7642FF722A6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {77DFF548-13F4-9FE9-930B-B7642FF722A6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {77DFF548-13F4-9FE9-930B-B7642FF722A6}.Release|Any CPU.Build.0 = Release|Any CPU - {B8D0DCBD-8D03-E450-0258-D0660A356BF0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8D0DCBD-8D03-E450-0258-D0660A356BF0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8D0DCBD-8D03-E450-0258-D0660A356BF0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8D0DCBD-8D03-E450-0258-D0660A356BF0}.Release|Any CPU.Build.0 = Release|Any CPU - {A8586A5A-A213-4C66-819C-E692187B1F39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8586A5A-A213-4C66-819C-E692187B1F39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8586A5A-A213-4C66-819C-E692187B1F39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8586A5A-A213-4C66-819C-E692187B1F39}.Release|Any CPU.Build.0 = Release|Any CPU - {113167DA-602A-4EBE-9357-D83C090DBA3F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {113167DA-602A-4EBE-9357-D83C090DBA3F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {113167DA-602A-4EBE-9357-D83C090DBA3F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {113167DA-602A-4EBE-9357-D83C090DBA3F}.Release|Any CPU.Build.0 = Release|Any CPU - {2379F502-BBBD-4BF2-91F7-D0E5C61E91B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2379F502-BBBD-4BF2-91F7-D0E5C61E91B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2379F502-BBBD-4BF2-91F7-D0E5C61E91B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2379F502-BBBD-4BF2-91F7-D0E5C61E91B7}.Release|Any CPU.Build.0 = Release|Any CPU - {2E4C437A-989D-68D9-C5FB-1AE085B2CBC8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2E4C437A-989D-68D9-C5FB-1AE085B2CBC8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2E4C437A-989D-68D9-C5FB-1AE085B2CBC8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2E4C437A-989D-68D9-C5FB-1AE085B2CBC8}.Release|Any CPU.Build.0 = Release|Any CPU - {C9756AD3-3AEA-4AA8-99E3-8305D37E0903}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C9756AD3-3AEA-4AA8-99E3-8305D37E0903}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C9756AD3-3AEA-4AA8-99E3-8305D37E0903}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C9756AD3-3AEA-4AA8-99E3-8305D37E0903}.Release|Any CPU.Build.0 = Release|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B4311504-B0C8-AC8D-02A5-81AD43B4087B}.Release|Any CPU.Build.0 = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5FA85E8E-3276-43DF-CC93-6A9847905166}.Release|Any CPU.Build.0 = Release|Any CPU - {C996D147-5B81-49D9-949B-F3BC185B2CD4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C996D147-5B81-49D9-949B-F3BC185B2CD4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C996D147-5B81-49D9-949B-F3BC185B2CD4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C996D147-5B81-49D9-949B-F3BC185B2CD4}.Release|Any CPU.Build.0 = Release|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F}.Release|Any CPU.Build.0 = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.Build.0 = Release|Any CPU - {72083C13-32E8-1122-7761-CE7C0B64AABA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {72083C13-32E8-1122-7761-CE7C0B64AABA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {72083C13-32E8-1122-7761-CE7C0B64AABA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {72083C13-32E8-1122-7761-CE7C0B64AABA}.Release|Any CPU.Build.0 = Release|Any CPU - {F80E583B-93F3-C1E6-A83D-AC83132DBC5F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F80E583B-93F3-C1E6-A83D-AC83132DBC5F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F80E583B-93F3-C1E6-A83D-AC83132DBC5F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F80E583B-93F3-C1E6-A83D-AC83132DBC5F}.Release|Any CPU.Build.0 = Release|Any CPU - {D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B}.Release|Any CPU.Build.0 = Release|Any CPU - {7D372713-5117-82F2-7591-C0AE09BA04CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7D372713-5117-82F2-7591-C0AE09BA04CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7D372713-5117-82F2-7591-C0AE09BA04CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7D372713-5117-82F2-7591-C0AE09BA04CF}.Release|Any CPU.Build.0 = Release|Any CPU - {479D24D3-D01D-6655-87E8-5A236B3BA371}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {479D24D3-D01D-6655-87E8-5A236B3BA371}.Debug|Any CPU.Build.0 = Debug|Any CPU - {479D24D3-D01D-6655-87E8-5A236B3BA371}.Release|Any CPU.ActiveCfg = Release|Any CPU - {479D24D3-D01D-6655-87E8-5A236B3BA371}.Release|Any CPU.Build.0 = Release|Any CPU - {62A90887-34B9-1BDE-8851-9CC926AEBBBE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {62A90887-34B9-1BDE-8851-9CC926AEBBBE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {62A90887-34B9-1BDE-8851-9CC926AEBBBE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {62A90887-34B9-1BDE-8851-9CC926AEBBBE}.Release|Any CPU.Build.0 = Release|Any CPU - {5AFC464A-9B1F-7415-2D2E-320D567ED818}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5AFC464A-9B1F-7415-2D2E-320D567ED818}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5AFC464A-9B1F-7415-2D2E-320D567ED818}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5AFC464A-9B1F-7415-2D2E-320D567ED818}.Release|Any CPU.Build.0 = Release|Any CPU - {3B618981-F1CB-9AEC-E90B-4B05B982C1FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B618981-F1CB-9AEC-E90B-4B05B982C1FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B618981-F1CB-9AEC-E90B-4B05B982C1FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B618981-F1CB-9AEC-E90B-4B05B982C1FC}.Release|Any CPU.Build.0 = Release|Any CPU - {44957812-548A-D14C-6C92-F9902DADDCDA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44957812-548A-D14C-6C92-F9902DADDCDA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44957812-548A-D14C-6C92-F9902DADDCDA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44957812-548A-D14C-6C92-F9902DADDCDA}.Release|Any CPU.Build.0 = Release|Any CPU - {A879CDFF-BC9F-C591-0D7E-3A4381489425}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A879CDFF-BC9F-C591-0D7E-3A4381489425}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A879CDFF-BC9F-C591-0D7E-3A4381489425}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A879CDFF-BC9F-C591-0D7E-3A4381489425}.Release|Any CPU.Build.0 = Release|Any CPU - {1A02494C-AC35-C41C-3E89-2CB4FEF0A792}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A02494C-AC35-C41C-3E89-2CB4FEF0A792}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A02494C-AC35-C41C-3E89-2CB4FEF0A792}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A02494C-AC35-C41C-3E89-2CB4FEF0A792}.Release|Any CPU.Build.0 = Release|Any CPU - {A91A8E8C-7B2F-5278-B771-668E5292E9DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A91A8E8C-7B2F-5278-B771-668E5292E9DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A91A8E8C-7B2F-5278-B771-668E5292E9DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A91A8E8C-7B2F-5278-B771-668E5292E9DC}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {AF6AFFEE-1A76-4ABD-BEF2-0CB497A99003} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {4A8296D9-E1B1-4F5C-8CC9-870F8DDD1E20} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {14DC8B87-82B5-4A76-BBAB-BBD76F7C3555} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {4995C481-7465-4A36-8416-0D0D14F64B10} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {9DB2C5DB-7FDB-47F4-AAE9-AA9641959AA1} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {3B6F4C72-975B-44A4-9F72-A217E53E05C1} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {95909DDC-66A1-410A-9AB1-CD62EA33CFA0} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {1AFDF87C-220D-44EC-B5DA-99B0510AE561} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {7F7FB560-7005-438B-8D95-4FA781B5F1F3} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {7F831848-A1C1-49FE-B81A-499AB6E17286} = {7F7FB560-7005-438B-8D95-4FA781B5F1F3} - {9C2A3557-31E4-4D06-A08E-138E31412AD4} = {7F7FB560-7005-438B-8D95-4FA781B5F1F3} - {7DB6FFDB-0D28-4BA0-85DD-EF7A5D754EB6} = {7F7FB560-7005-438B-8D95-4FA781B5F1F3} - {8064607C-BDB9-454D-8E76-2B21023CD071} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {3E2388B0-2870-47DB-87E9-32F295E32D05} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {A3BF5605-8684-4713-885D-CC498CC37686} = {3E2388B0-2870-47DB-87E9-32F295E32D05} - {D1399D41-0273-45FA-969F-FA9C77432A06} = {3E2388B0-2870-47DB-87E9-32F295E32D05} - {E790A9A3-3C24-4478-A547-0FE13F7F6963} = {3E2388B0-2870-47DB-87E9-32F295E32D05} - {192A028F-23AD-44A2-A7B2-8397FEA30B08} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {56F007F7-23A8-4F13-B45F-57D4EB35AB2C} = {192A028F-23AD-44A2-A7B2-8397FEA30B08} - {7C5BEBF8-EEC6-4606-A6D4-0E73246F61A8} = {192A028F-23AD-44A2-A7B2-8397FEA30B08} - {7259B767-9528-4EF9-8F81-20344879F1CD} = {192A028F-23AD-44A2-A7B2-8397FEA30B08} - {FDE379A6-8285-4001-818A-DDEA928DE702} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {ED7E70B9-8FEE-48DF-9962-AD1062769342} = {FDE379A6-8285-4001-818A-DDEA928DE702} - {BAD28D5B-8A14-43DF-A236-E313FD97E799} = {FDE379A6-8285-4001-818A-DDEA928DE702} - {DA0B9C1E-B69A-419F-8BB3-C2E308F5A2A8} = {FDE379A6-8285-4001-818A-DDEA928DE702} - {60C97165-7CAB-467A-857E-9343B239F8EF} = {FDE379A6-8285-4001-818A-DDEA928DE702} - {C18979C7-EBD1-437D-A877-4A97B68761A5} = {FDE379A6-8285-4001-818A-DDEA928DE702} - {0AD78B12-EDC5-48E2-8FA3-309E731945EB} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {DCB63198-F2E6-4F3D-ACDE-F02F184D3C9F} = {0AD78B12-EDC5-48E2-8FA3-309E731945EB} - {D2AB9E95-A074-498A-A475-2298D0F1973E} = {0AD78B12-EDC5-48E2-8FA3-309E731945EB} - {AE5FF8DB-F3B2-4529-B9CE-7CFC98E0CC8C} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {DA8FB07D-1347-4E5A-B84C-8AB955A652AD} = {AE5FF8DB-F3B2-4529-B9CE-7CFC98E0CC8C} - {2D66E202-B34D-4998-BD80-5411C8087695} = {AE5FF8DB-F3B2-4529-B9CE-7CFC98E0CC8C} - {C22741F9-FC56-4AE3-B543-9F15C779D345} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {4EC45855-A09A-4B77-99A8-DA00E2D702E8} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {42439E6A-0084-48A9-9620-0B9EAB4182C4} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {F1290A8A-3BBE-4647-90D9-4AD537432AB5} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {FAF2D4A3-7A7F-4848-9817-66D164D03F0F} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {9E728961-7C0B-4C2B-92E4-8965B45ADB19} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {C186173C-7725-41A6-B5E3-F46219B03C5F} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {79C92610-5F1B-4FA0-AC7A-BE2872AF6A5A} = {C186173C-7725-41A6-B5E3-F46219B03C5F} - {45E954A6-5F29-48B3-B518-513F6837EE27} = {C186173C-7725-41A6-B5E3-F46219B03C5F} - {D3C59DAF-CEB7-4D40-BEFF-1D9AA9FEFE94} = {C186173C-7725-41A6-B5E3-F46219B03C5F} - {2DAE26C2-BB2C-49CE-B52D-D53383ADE560} = {C186173C-7725-41A6-B5E3-F46219B03C5F} - {92BC5C99-A17F-4936-BF8C-ED2AF9795D6E} = {C186173C-7725-41A6-B5E3-F46219B03C5F} - {622B90DB-1665-4822-82EF-7DDAC5629834} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {0FCB18BE-6D50-4567-8CBD-80B0336D9685} = {622B90DB-1665-4822-82EF-7DDAC5629834} - {9B4C9894-D295-4D16-AC90-F98563B37722} = {622B90DB-1665-4822-82EF-7DDAC5629834} - {E7EFE38E-1214-4D7D-A9DA-F753D613F956} = {622B90DB-1665-4822-82EF-7DDAC5629834} - {BC3E9C3B-EA51-4CC8-AD94-7F0285239907} = {622B90DB-1665-4822-82EF-7DDAC5629834} - {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} = {8F690C33-40BF-4EF8-A96A-D7FB56F163AC} - {33D6A170-D609-430C-B110-E1A8F3322C06} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {E1758B64-3ED1-4D79-AAAB-8307BFF16C0F} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {3C4B3AA1-C98D-4D88-AB73-EC4D3FC3177A} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {19CD928F-D16F-4A91-BA0C-2459F5055565} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {86993E17-8793-45ED-B636-C921BB1165D7} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {158AFAD1-39AE-4135-81EE-55F905802A8B} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {2BE2CFE9-26E7-4791-B9DE-109B465B701C} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {C326B106-8818-42FC-9A2F-C58201EE796C} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {BF943CF0-2732-41D3-BFE3-9B843564D807} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {B93528E2-55EA-4847-950D-8B95B1CC2909} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {2BD4EF1A-F6F5-4199-9BD2-4B07319852DB} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {BCF85E69-4D97-4DD3-8526-B33C76BD17CA} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {2B1B759E-670A-4837-854A-4748C67BB15B} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {9ACB83F6-C911-4473-973D-A3BECFB5F1E6} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {97064B96-B5AC-461D-BBBF-97A864F373E6} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {617EEDAE-1E4C-4B6C-836A-DDD1DB2BF2CE} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {DB4498D8-E45B-4A5A-9BF2-830039B2D38D} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {412BAB54-282E-4A01-AF72-E76F3AF31AE7} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {EFD48C85-7EA6-4553-B8A3-15A3867C8EC0} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {21EFCD3B-D0C7-42F5-B77D-3B33D440AE2E} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {7DC9FED9-CB0C-4B8C-9EB2-AF981864F57E} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {DD0EBD4F-0BE9-46A1-91E0-6B66A814664C} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {DA053CAE-EBA4-4532-93B5-3347589CB174} = {C326B106-8818-42FC-9A2F-C58201EE796C} - {8F690C33-40BF-4EF8-A96A-D7FB56F163AC} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {91867618-0D86-4410-91C6-B1166A9ACDF9} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {76810110-6683-4777-9157-8030F9205FBF} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {80DDA32B-2BDA-4704-9458-6D680B08B74C} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {29EDFC3B-3FC3-47AF-84D5-2F644C7ABD2B} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {FB07F20F-1BC7-4711-9357-A4B7EA0A2C51} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {ED7AADAF-72D8-4C04-96CE-B46B21C9C343} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {6518F1B5-63EA-46A2-87ED-FD90366594EC} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {AB79F7C4-9AE1-4921-B18A-F64074B1DC69} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {DCF463DE-50CA-4585-BA9F-83F7101B5ED7} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {A2E248DB-B2DD-4916-82A6-5D296C1298B5} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {293C7A2B-46D2-49B6-A8C6-294500ED5AE5} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {21691099-AF37-4706-84AE-C19C72DC09B6} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {C31A17E0-AE56-419C-A6D1-3FCBB68005E2} = {C46E03DE-FFFA-4659-97AE-77BDA46C3FCA} - {D9C65C9D-8591-46DA-A3EE-419393E607AB} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {974D842A-9739-40E4-96E8-039552E28D8B} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {7450F9AF-3C5D-4137-AEC7-2AA38E8006E6} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {F3064272-5A6F-4CB9-B79F-8D37A2392CC1} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {1DD17D3E-F8EC-44AA-8437-3AF541CD3988} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {F42FAF67-D10F-487A-A74C-E6D8EA90831C} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {81B74E08-06CD-4134-A02D-B4B837945E2B} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {78635E6D-2C35-437C-96CD-29DAEAFE0076} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {F8CBD522-6668-4A5F-B62D-9E37E7DC1279} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {33FC6389-3931-4BD2-A619-36C4A8F5C7B0} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {58A4954C-4901-4172-BEE7-5584ABB0DF45} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {D4BC55C7-1991-4866-A7BA-66653DACF945} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {C6EDE646-6A5E-4495-8A30-88D1EAE9A42E} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {CF1F1193-FECE-4E98-A4FC-643A86F30429} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {46C57140-EE02-4785-9777-F2264EC88135} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {3BA4B7EC-65E1-4BCE-8533-6FB2FBA7DFCA} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {3AD66E47-B667-40D1-AE61-F5EC186241F7} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {AD3E63A3-3422-4A1A-AC89-B20786A5323E} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {CA2975D9-5477-4281-8D84-F0909F22DFF3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {90F837CB-72DF-40B7-8DA0-6E568ECEEF0A} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {34C9609F-556B-44D7-B3DE-5637FEB0BFEC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {A69E6742-39A6-4C0D-A098-E16A653331AC} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {6AC4C18F-2BB5-47F9-99F5-5585E1D22111} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {4D738A46-2B08-4A88-8787-668A4AD5AE5F} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {3A74FBEF-AE1F-420D-9B08-E09E03C740D5} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {0B9E97DE-0265-4192-9FAF-B5AF65AC6611} = {3A74FBEF-AE1F-420D-9B08-E09E03C740D5} - {C873BEE8-D4AF-48E5-8E77-24C2E5B24CC2} = {3A74FBEF-AE1F-420D-9B08-E09E03C740D5} - {96BA4536-5E1E-476D-9368-BAF6FC939D25} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {EA56194E-B0EF-42B1-BC35-9A677D7D66BB} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {56C00F97-6769-44B2-8004-341D5286E31F} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {DEF21757-F9F0-4D98-BB4B-007D8F7F6C5E} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {6C774F10-5FAC-4177-9BFA-28486747DF3D} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {91BD29B8-FD39-4429-A8FF-C5A1E511C632} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {DB29E904-C164-46B3-A12C-3A908FCA6DB9} = {96BA4536-5E1E-476D-9368-BAF6FC939D25} - {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {6F5CD33F-ACD9-4BF3-99DE-33A24116A672} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {1EA3971F-E854-4198-AC8D-BC3C4F804B25} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {A5CA092D-E294-4BF6-92AF-CCF136A643D1} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {9CDC9B6C-C69E-483F-B881-5D065FA064C9} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {A74A9B50-0E40-44AD-9360-5BF96696B405} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {A243383E-7025-4893-9611-EE75DA055301} = {E17C1E4A-9BD2-42DC-99E4-B6E104D3789A} - {936C5D74-B90F-4932-87C3-C1A0A29083B9} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {86ED8028-5533-4B5D-8594-C09929F2A553} = {936C5D74-B90F-4932-87C3-C1A0A29083B9} - {C056C11F-EC74-4720-ACEA-D4C57DC4736F} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {A09032AD-D895-4D83-8D3D-67FF3285F7A6} = {936C5D74-B90F-4932-87C3-C1A0A29083B9} - {59A3A2B8-7992-4321-A481-8C2CD08D0835} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {F9D10E1C-38DC-423D-8B79-BE4673C75B50} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {53479279-0E9C-4921-BEB1-46FDB553C8E2} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {8472D376-D2DB-40C3-AAF9-9ACDF1731919} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {1D7770AA-1669-45CE-88D9-3009C6A48AEE} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {F4ED4FC9-74D5-4379-9787-1F7756B56201} = {C056C11F-EC74-4720-ACEA-D4C57DC4736F} - {FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {F87CA546-1ED2-409A-AD87-62E133BD3EF9} = {FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58} - {2BB68CBB-2220-466B-B24E-6916819DFB79} = {FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58} - {ACEFA4C4-4CA8-4358-9B75-3806DF228517} = {FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58} - {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {AF2F208F-43D6-4296-9826-677681BEC6D4} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {B3F2E786-B28D-444D-9BD9-DD16CBFD38C4} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {7B26E45A-99B1-47EA-9015-7DD78CAFC423} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {F826B05A-2736-4361-ADE5-04B1CF171ED4} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {CA0B06C4-BBD3-42B3-A637-5B9FD601FFBB} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {0E84E1E4-82F8-412B-94F2-E06FF1320B1D} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {C9202B23-45E9-4167-BFAC-89651AF554EB} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {16666C1F-09C1-4829-9AFC-77FB22439A59} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {152DA047-C1BF-4028-B3E7-EF7CEE01AC4E} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {1695CAAA-C8BA-4B28-B8A9-F6D8F7C7BB45} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {DAFCBF4F-8174-4934-929E-374FBDCE854D} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {CC05C0C9-A0C6-4DFC-863A-6E2778E627EA} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {ECE6E6D7-A4F6-4F50-BC21-AE2EB14A3129} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {1C3BCC38-D583-402F-B922-5562F19EA12C} = {ECE6E6D7-A4F6-4F50-BC21-AE2EB14A3129} - {00A6598E-8913-47C4-97F7-0E784EA9D55F} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {A8A8A180-C40F-43C7-B6B2-622344CE276B} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {232EF431-1366-4A4B-B2C7-C3FEDC5F5AD7} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {5960FE7B-EC00-4C8D-A522-8FFEC184694D} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {07C2CB8A-5CEB-4245-AC16-67BCB50FAB7A} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {6A79337A-879F-4A9F-8328-5578E40177B5} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {65CF5AD9-7D2A-4E31-B695-390B2D4A70D0} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {233C2407-3ED3-4322-B28D-0F93CF4C6E33} = {65CF5AD9-7D2A-4E31-B695-390B2D4A70D0} - {118D91CE-091B-4C65-8979-2F5363C56CDC} = {78DDE8A1-6501-4213-9BB5-CE6A11341F7D} - {3EF74657-9EBC-46FD-B2CA-40959D0EE692} = {78DDE8A1-6501-4213-9BB5-CE6A11341F7D} - {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {03EE2B05-32A4-43E1-B7F7-D2FCBD94B0DD} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {A15DA7D6-1C3A-436B-9D2D-4ABC0C2A80E2} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {A788317B-1649-4D26-AB6C-6AA5B35767DA} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {BD990314-682C-4BF1-A1B3-A0A0E37AAEB2} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {C027362E-9B72-4058-91DF-D7F0FDD162AA} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {4EFA5940-881E-4A32-BF8C-D15FF74DFB0E} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {0E0683C3-5169-4965-A886-D960811E1807} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {8011A4C4-F08C-463D-A376-F33A7F780F57} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {78767BC5-FE68-4919-BC1B-DE7FF71F294B} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {8F29FD0D-D84C-4374-9BE1-02D7FA99E10E} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {7C714185-D3D9-4D94-B5CB-D857A0091F04} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {9697AB9A-2ACA-42E5-877E-EEF371166898} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {76A4D1FD-479A-4C57-96E0-BBFCCBADB683} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {E4C02147-34FA-43D1-B03C-00D539CF18BC} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {AABB5ABC-790E-48D1-B654-72143227FA64} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {CA5E2785-511D-4A14-8883-2544C869B2DF} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {AB897095-EA92-4AD9-829C-66FEE1878A5D} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {40A9F0DB-66AA-42A8-8670-9DD6DA992103} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {1FA05CCA-0584-4320-B278-D5AA1234BA02} = {40A9F0DB-66AA-42A8-8670-9DD6DA992103} - {7B6A98B3-90C1-49F2-8A17-C70FED500627} = {40A9F0DB-66AA-42A8-8670-9DD6DA992103} - {4F837B81-EA7D-472A-8482-3D5A730DF810} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {1F404E43-FA13-485D-B922-7D8848EBCE0F} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {2230E355-50F7-424F-929F-532B0A5DABE0} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {FBCDC571-F747-46AB-AFCB-38D191DCFFB6} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {83D2F8F2-82C7-4919-9B65-D0FBF0B5324C} = {B4247B78-34BC-4A3F-91A4-661F7DCD6E10} - {FD9F5933-FDE5-4504-99BF-9050E0435C6D} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {CAEF3248-527D-48B7-9C98-929AC573C381} = {FD9F5933-FDE5-4504-99BF-9050E0435C6D} - {209E7129-4B39-4768-A0D6-797F796E4FCE} = {FD9F5933-FDE5-4504-99BF-9050E0435C6D} - {D67EBE62-C541-45E4-957E-D1D11BE74F68} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {0D69B63D-F082-4D57-9FF0-355642C56993} = {DE48451F-D4CB-4C9F-B300-4CA0B8ED9E1C} - {7623D363-F0BD-400C-B8AB-3FD9699D92D9} = {0D69B63D-F082-4D57-9FF0-355642C56993} - {E2BA59EA-769B-4D5B-8032-CB9682D0D73A} = {0D69B63D-F082-4D57-9FF0-355642C56993} - {5F0926F3-463D-445B-9746-0A037DC431F9} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {21878B72-9801-41CE-88CD-7195714AE9BA} = {B4247B78-34BC-4A3F-91A4-661F7DCD6E10} - {97C36EF3-805E-4B93-9AF6-C1E22AA583B1} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {99CB6AD9-92E8-4B9B-99E3-28404AA41655} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {2263600B-30CB-4188-925D-92F12F904163} = {97C36EF3-805E-4B93-9AF6-C1E22AA583B1} - {2ED0ED0F-15F6-4555-BC97-F5426FCC0C0E} = {97C36EF3-805E-4B93-9AF6-C1E22AA583B1} - {C1023A56-87CE-4227-8F0E-0F9DAA1E20B8} = {97C36EF3-805E-4B93-9AF6-C1E22AA583B1} - {FAD86432-6A95-47DE-8E3A-FC2101753C52} = {99CB6AD9-92E8-4B9B-99E3-28404AA41655} - {5F278E32-3A2A-4654-BD3C-B183301382FB} = {99CB6AD9-92E8-4B9B-99E3-28404AA41655} - {1DB57C74-1C40-4414-B968-937C3C1C157E} = {99CB6AD9-92E8-4B9B-99E3-28404AA41655} - {F10EB725-5A50-4C80-B8D1-88C7BE23D5A9} = {99CB6AD9-92E8-4B9B-99E3-28404AA41655} - {C4D3B4CA-6631-4447-9D89-A535305E581A} = {7F7FB560-7005-438B-8D95-4FA781B5F1F3} - {18FCB763-1EFF-47DF-ACED-98B7F994FD10} = {7F7FB560-7005-438B-8D95-4FA781B5F1F3} - {3B5EB3D6-08FD-490C-BC70-805B199A0333} = {FF0DFDF2-2E59-48B9-9C0F-CFF13EA0AD58} - {28422FE4-8D58-4D8A-8363-7A9D569A5695} = {40A9F0DB-66AA-42A8-8670-9DD6DA992103} - {B65FCDE2-8D6E-4E37-A2B3-BBE3159C1EF5} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {90C71347-89E2-4546-9A64-FE56F6A48E13} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {93B1913D-41B8-4FAB-8472-4BE03F4DC03C} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {6FA91938-03AB-41B0-9A80-14AE550D745E} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {838A6EB6-BCD4-498E-A729-6875F4A6EDF1} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {EA9F69A2-ACCF-477B-9519-257CF47DC0F4} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {7DEB35A1-09AC-4183-A5BE-8DE1CBFFC075} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {78DDE8A1-6501-4213-9BB5-CE6A11341F7D} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {5531E2F2-2FC2-45A0-93C7-7FC6F6A4F0AD} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {3DFAECE7-496B-4E86-A23F-5F9A597D1119} = {5531E2F2-2FC2-45A0-93C7-7FC6F6A4F0AD} - {3690518A-D6C3-42CC-AEC2-6D48C6987F68} = {5531E2F2-2FC2-45A0-93C7-7FC6F6A4F0AD} - {0D34162C-0CE3-4D7B-B19A-4786C616D0B3} = {5531E2F2-2FC2-45A0-93C7-7FC6F6A4F0AD} - {FDBA1B4A-CC5D-4710-AB8C-FA5A91B91BDE} = {40A9F0DB-66AA-42A8-8670-9DD6DA992103} - {B7F866FF-8C8F-4C7D-9084-E0C206F1F26F} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {E957DB2E-589D-4310-9576-92F108A67CE7} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {4DEFD1AB-C8CD-4240-B4C7-1C8EA4286B2A} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {C4690A20-8628-4A39-8E71-2D09800D0E72} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {8233A44F-4DFC-4701-9C04-834FD3C97060} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {66A6E78D-E547-4DD7-9844-087FAB3D03C2} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {A99F5406-37DC-4677-9166-9BDE90C26CA6} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {8FA3ED81-19AB-4E0C-B36A-DF49131A2AB3} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {7C1A8FF7-9FD1-41FC-856D-7A2DC6F7CE6F} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {986B92F6-A758-4D1F-8BC7-BFD13FF38591} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {62D72C3E-5C57-439D-B7F7-5C55CC384A7A} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {74156CFF-C236-4DED-B810-FAD8948F51CA} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {63D08153-B43C-4884-8818-4AB42E1FEE75} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {AF02868C-283E-4CB2-8866-3B0CAD1BB2DE} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {F7459720-873C-4741-A991-A671CF03A6AF} = {A3B6DFC3-5D27-496E-9AD6-C1035213F1DC} - {382CAC43-EE1F-4DA3-B433-E23C3F58F44A} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {4634B421-36E6-4169-AA1A-11050902495F} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {BB2DF96A-6ED8-4F47-948C-230EA2065C4C} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {DB80C55F-8B70-4840-942A-ED021ED88BD6} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {E3C07A77-EAF9-4A3F-8814-7D2F116C8E26} = {ECE6E6D7-A4F6-4F50-BC21-AE2EB14A3129} - {DA54E88E-C43E-4E31-92D0-08A753F2C08D} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {A7417E7F-DB97-48DB-B849-AFC15854A6E7} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} - {8DDE4291-BC57-4C56-9871-B982462F4C3D} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} - {C5D64A2B-7E7E-4509-9F31-425D59712E6F} = {37E2CAFE-0024-452E-BF81-E15F937E08EF} - {07C2FB08-985C-42FE-85AF-38E40A301668} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {A52C54FB-C96D-4032-8588-AFC2CD158D23} = {07C2FB08-985C-42FE-85AF-38E40A301668} - {B05ED61E-9A36-4E90-B876-F48559E018A6} = {07C2FB08-985C-42FE-85AF-38E40A301668} - {1E8DE890-F27F-4A1A-B356-0B6B9D3B1EF7} = {07C2FB08-985C-42FE-85AF-38E40A301668} - {4FCD7337-4320-412D-9BC8-A0B243BC27B3} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {9D2C789C-8241-4F53-AFEF-F2AB15BAA823} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {36AEA095-E34D-43F5-8000-9FA3A696C312} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {2D5A9AB0-9F32-4784-8972-814F86C0239D} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {A4ECDDC4-1115-48A2-AC74-3B75B58F8FFB} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {AF15C829-9288-4D7F-95A0-4EA8DF909929} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {616652A5-A420-475C-AC9F-FC687E3C768B} = {4FCD7337-4320-412D-9BC8-A0B243BC27B3} - {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {D736C433-C230-46B7-9D43-17D0282EBBDF} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {FA525A71-C0BF-49FB-BAB7-547944618587} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {532D5703-0090-4F2E-B725-5786D53506C9} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {E538580B-A21F-4B3B-9CB4-741FE8C1C6EF} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {71CF0E82-FA07-472A-B32A-AC25EDA82BB0} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {77965572-373C-4319-9EF9-73D6E660044B} = {E29EC2A4-A2DE-442F-8616-DAFD69F128B8} - {4A2CF141-F32D-45A0-8665-B3705667A6D2} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {A3924A79-1ADC-458D-8764-3958297BDEB0} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} - {38A933EB-82F1-42A6-ABF3-F55975B4078E} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} - {03C9FFB2-E9A3-4CCC-A6B1-8B248BFBCB65} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} - {CBC64BD6-297B-48F6-A3BA-0DBB4B0F5A69} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} - {319428B9-CE7F-4027-92FA-6311C4CE95FB} = {4A2CF141-F32D-45A0-8665-B3705667A6D2} - {9AE3E97E-8846-4315-9546-FF97E97FD49F} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {BC7A8662-4313-4F1D-B267-9B1B69444CD3} = {3AD66E47-B667-40D1-AE61-F5EC186241F7} - {7C35101B-EA29-4B3D-B424-FAD625977E4D} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {4539FCDB-7192-442C-BD9B-0AC71E882F4F} = {7C35101B-EA29-4B3D-B424-FAD625977E4D} - {30EEF879-CFF7-4661-89CB-9CB68328D008} = {0D69B63D-F082-4D57-9FF0-355642C56993} - {37740138-D088-46F5-83A8-8A8180FE65D8} = {B4247B78-34BC-4A3F-91A4-661F7DCD6E10} - {5BE31786-EAAB-4C86-8FFF-C07F27FBFD1C} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {77B3C7A4-15C7-4EFF-8451-4F13B4CCA4AE} = {C22741F9-FC56-4AE3-B543-9F15C779D345} - {746813A9-4221-42D8-AAB5-66CB69EC844F} = {0D69B63D-F082-4D57-9FF0-355642C56993} - {15106D95-EE9A-4C9D-AB12-41FBE46A9A89} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {EB3EC78D-CD1C-423F-B866-74E0DC8D429D} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {C4761F7E-6DFB-4D84-BCA1-38A7EDC28B01} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {FCD95DCE-9DF4-403C-966C-FF19ADD2EA43} = {0D69B63D-F082-4D57-9FF0-355642C56993} - {A31C7F96-3AC6-44AF-B505-7D900C945291} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {6C9E816F-3ECD-4AD1-A592-C4EDA1F011A3} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {9D357D4C-532A-4ADC-9CCB-C95B4E033547} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {C33DBB02-F788-4EE0-ABDD-22861FC40D79} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {E115487D-AAEF-4623-832B-94C14C79E991} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {67B2403C-FFC8-47C7-BD71-A9D730430024} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {DA42E464-C824-461C-8D17-14FC2B293F65} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {CDC0F589-D716-4FCE-9BBA-CD1A0B3D8409} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {57C95347-CF48-43DD-BFC9-597A43041AC5} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {06FC3141-5F92-43A6-94C9-E2519EE9A91E} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {4E3CE014-38BF-FF33-A107-B268E57CE8E9} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {57A61286-DE14-9313-5BAB-B077C6239377} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {44DE8AC4-D7AC-C71C-9C77-4A1C0137D3E3} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {B080B644-A835-42EE-EBF5-C47B6D075588} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {170F4C72-BED2-C77A-64B0-F4CB9A232026} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {00868838-6891-B034-AAB7-AADAA3ECDCB3} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {E40CB92D-6C03-4A61-9A47-057CA504A46B} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {4C7594CE-FB2F-4309-B95C-D4460892CF6E} = {7C714185-D3D9-4D94-B5CB-D857A0091F04} - {C9266D5D-3860-09C3-F566-489BBB57A534} = {D94D6AFE-20BD-4F21-8708-03F5E34F49FC} - {40DC9A79-2E8A-4C6F-A637-5C09D6F26B0E} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {32F0884D-DA64-4659-AEB7-2717B977855F} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {B6452D3F-E58C-C433-E52A-F65EE2657E01} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {D613F393-9CEE-2D3B-33C9-90630F8348E7} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {2A8DDC93-94B6-75B4-5B0C-DA72B1AD0E6A} = {D9C65C9D-8591-46DA-A3EE-419393E607AB} - {311C3A82-3B01-79BD-F9C5-FCC2549A9A8D} = {0DF5AD76-AEEA-4052-A6CA-A44C24879F11} - {F2A31684-7A38-B77D-CCAA-C21B9A8B45CF} = {42F31C68-B8B2-4BE0-9AD0-A7DFA6092629} - {77DFF548-13F4-9FE9-930B-B7642FF722A6} = {65CF5AD9-7D2A-4E31-B695-390B2D4A70D0} - {22295ECE-A973-43F0-A6F2-982F7DB02F4E} = {99B7CBDE-A251-4738-97F0-DB1DB484BEE1} - {B8D0DCBD-8D03-E450-0258-D0660A356BF0} = {22295ECE-A973-43F0-A6F2-982F7DB02F4E} - {A8586A5A-A213-4C66-819C-E692187B1F39} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {113167DA-602A-4EBE-9357-D83C090DBA3F} = {F3449D35-8671-4BF6-8D1B-EFBB8AFD61DD} - {2379F502-BBBD-4BF2-91F7-D0E5C61E91B7} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {2E4C437A-989D-68D9-C5FB-1AE085B2CBC8} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {C9756AD3-3AEA-4AA8-99E3-8305D37E0903} = {07DFEB1E-ED92-4E97-A801-FAB2D70F4F35} - {B4311504-B0C8-AC8D-02A5-81AD43B4087B} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {5FA85E8E-3276-43DF-CC93-6A9847905166} = {4F837B81-EA7D-472A-8482-3D5A730DF810} - {C996D147-5B81-49D9-949B-F3BC185B2CD4} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {AB207B2A-C8E7-977D-98E6-66527CBB2B7F} = {91867618-0D86-4410-91C6-B1166A9ACDF9} - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2} = {91EE5D5B-B6DF-43F1-BC09-1A982719A34B} - {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} = {0B58AA48-665A-443F-A6A8-751FB9629DAF} - {72083C13-32E8-1122-7761-CE7C0B64AABA} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {F80E583B-93F3-C1E6-A83D-AC83132DBC5F} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {D8E28DB1-D8C8-C46C-A93E-CA3A0D90065B} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {7D372713-5117-82F2-7591-C0AE09BA04CF} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {479D24D3-D01D-6655-87E8-5A236B3BA371} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {62A90887-34B9-1BDE-8851-9CC926AEBBBE} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {5AFC464A-9B1F-7415-2D2E-320D567ED818} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {3B618981-F1CB-9AEC-E90B-4B05B982C1FC} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {44957812-548A-D14C-6C92-F9902DADDCDA} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {A879CDFF-BC9F-C591-0D7E-3A4381489425} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {1A02494C-AC35-C41C-3E89-2CB4FEF0A792} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - {A91A8E8C-7B2F-5278-B771-668E5292E9DC} = {E87F876B-EEC8-4A3B-9FF0-15EB38B4A7BC} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {711A43C0-A2F8-4E5C-9B9F-F2551E4B3FF1} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.SingleProject.slnx b/aspnet-core/LINGYUN.MicroService.SingleProject.slnx new file mode 100644 index 000000000..a05fcda87 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.SingleProject.slnx @@ -0,0 +1,426 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.Startup.sln b/aspnet-core/LINGYUN.MicroService.Startup.sln deleted file mode 100644 index 19325f40f..000000000 --- a/aspnet-core/LINGYUN.MicroService.Startup.sln +++ /dev/null @@ -1,123 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31919.166 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "backend", "backend", "{18C61233-DAE0-4285-AD1F-0928E752FB30}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server", "identity-server", "{099F0FD1-645D-4029-8149-46523AD34933}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity-server-api", "identity-server-api", "{BA506EAD-E2DD-4EEA-B993-2AB90F32B8E4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{A3275CEC-C5CB-4F22-875A-8270B5F4D698}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{1D445339-DB00-4A4D-B7C1-6F112A46CFF6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{D425983A-9FCE-41E1-BA09-07EB9355EEEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.BackendAdmin.HttpApi.Host", "services\LY.MicroService.BackendAdmin.HttpApi.Host\LY.MicroService.BackendAdmin.HttpApi.Host.csproj", "{DCC1CBA7-1783-4022-88AE-FAB123B43277}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer.HttpApi.Host", "services\LY.MicroService.IdentityServer.HttpApi.Host\LY.MicroService.IdentityServer.HttpApi.Host.csproj", "{98F102FA-09B4-4C34-B28D-D172C608897F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.LocalizationManagement.HttpApi.Host", "services\LY.MicroService.LocalizationManagement.HttpApi.Host\LY.MicroService.LocalizationManagement.HttpApi.Host.csproj", "{241680C6-55ED-42DD-ABAB-9CA76CA649A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.PlatformManagement.HttpApi.Host", "services\LY.MicroService.PlatformManagement.HttpApi.Host\LY.MicroService.PlatformManagement.HttpApi.Host.csproj", "{B459FB80-74C6-4988-BE65-B0FE84EF0632}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.RealtimeMessage.HttpApi.Host", "services\LY.MicroService.RealtimeMessage.HttpApi.Host\LY.MicroService.RealtimeMessage.HttpApi.Host.csproj", "{0DBBB371-B1FC-421E-A4FB-900B016AFE6A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.IdentityServer", "services\LY.MicroService.IdentityServer\LY.MicroService.IdentityServer.csproj", "{03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "workflow", "workflow", "{E47CDAF7-1046-4886-A0CB-ADF9650F8318}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{3F453010-BA07-471D-87E5-B12346ED81EF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.TaskManagement.HttpApi.Host", "services\LY.MicroService.TaskManagement.HttpApi.Host\LY.MicroService.TaskManagement.HttpApi.Host.csproj", "{EDE83705-EFEA-46DC-A8EE-68A5D8159B84}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WorkflowManagement.HttpApi.Host", "services\LY.MicroService.WorkflowManagement.HttpApi.Host\LY.MicroService.WorkflowManagement.HttpApi.Host.csproj", "{48F376EC-B951-4123-AF33-54217AD00B96}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhook", "webhook", "{E38F0CBE-BCFF-4F75-AA19-1959B7B75EF6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WebhooksManagement.HttpApi.Host", "services\LY.MicroService.WebhooksManagement.HttpApi.Host\LY.MicroService.WebhooksManagement.HttpApi.Host.csproj", "{CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "gateway", "gateway", "{78413EF4-17A8-49DD-9E4C-D15BF547AEEB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.MicroService.Internal.ApiGateway", "..\gateways\internal\LINGYUN.MicroService.Internal.ApiGateway\src\LINGYUN.MicroService.Internal.ApiGateway\LINGYUN.MicroService.Internal.ApiGateway.csproj", "{068D6BBE-BB98-40FF-84E1-D34166263623}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.ApiGateway", "..\gateways\web\LY.MicroService.ApiGateway\LY.MicroService.ApiGateway.csproj", "{46BC00EE-3265-4B85-819E-0C28F16134C3}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "document", "document", "{D70EABBE-BDB5-4FDE-92DC-2EADE17E98D1}" - ProjectSection(SolutionItems) = preProject - ..\docs\startup-readme.md = ..\docs\startup-readme.md - EndProjectSection -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {DCC1CBA7-1783-4022-88AE-FAB123B43277}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DCC1CBA7-1783-4022-88AE-FAB123B43277}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DCC1CBA7-1783-4022-88AE-FAB123B43277}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DCC1CBA7-1783-4022-88AE-FAB123B43277}.Release|Any CPU.Build.0 = Release|Any CPU - {98F102FA-09B4-4C34-B28D-D172C608897F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {98F102FA-09B4-4C34-B28D-D172C608897F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {98F102FA-09B4-4C34-B28D-D172C608897F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {98F102FA-09B4-4C34-B28D-D172C608897F}.Release|Any CPU.Build.0 = Release|Any CPU - {241680C6-55ED-42DD-ABAB-9CA76CA649A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {241680C6-55ED-42DD-ABAB-9CA76CA649A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {241680C6-55ED-42DD-ABAB-9CA76CA649A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {241680C6-55ED-42DD-ABAB-9CA76CA649A3}.Release|Any CPU.Build.0 = Release|Any CPU - {B459FB80-74C6-4988-BE65-B0FE84EF0632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B459FB80-74C6-4988-BE65-B0FE84EF0632}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B459FB80-74C6-4988-BE65-B0FE84EF0632}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B459FB80-74C6-4988-BE65-B0FE84EF0632}.Release|Any CPU.Build.0 = Release|Any CPU - {0DBBB371-B1FC-421E-A4FB-900B016AFE6A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DBBB371-B1FC-421E-A4FB-900B016AFE6A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DBBB371-B1FC-421E-A4FB-900B016AFE6A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DBBB371-B1FC-421E-A4FB-900B016AFE6A}.Release|Any CPU.Build.0 = Release|Any CPU - {03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB}.Release|Any CPU.Build.0 = Release|Any CPU - {EDE83705-EFEA-46DC-A8EE-68A5D8159B84}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EDE83705-EFEA-46DC-A8EE-68A5D8159B84}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDE83705-EFEA-46DC-A8EE-68A5D8159B84}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EDE83705-EFEA-46DC-A8EE-68A5D8159B84}.Release|Any CPU.Build.0 = Release|Any CPU - {48F376EC-B951-4123-AF33-54217AD00B96}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48F376EC-B951-4123-AF33-54217AD00B96}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48F376EC-B951-4123-AF33-54217AD00B96}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48F376EC-B951-4123-AF33-54217AD00B96}.Release|Any CPU.Build.0 = Release|Any CPU - {CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2}.Release|Any CPU.Build.0 = Release|Any CPU - {068D6BBE-BB98-40FF-84E1-D34166263623}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {068D6BBE-BB98-40FF-84E1-D34166263623}.Debug|Any CPU.Build.0 = Debug|Any CPU - {068D6BBE-BB98-40FF-84E1-D34166263623}.Release|Any CPU.ActiveCfg = Release|Any CPU - {068D6BBE-BB98-40FF-84E1-D34166263623}.Release|Any CPU.Build.0 = Release|Any CPU - {46BC00EE-3265-4B85-819E-0C28F16134C3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46BC00EE-3265-4B85-819E-0C28F16134C3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46BC00EE-3265-4B85-819E-0C28F16134C3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46BC00EE-3265-4B85-819E-0C28F16134C3}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {DCC1CBA7-1783-4022-88AE-FAB123B43277} = {18C61233-DAE0-4285-AD1F-0928E752FB30} - {98F102FA-09B4-4C34-B28D-D172C608897F} = {BA506EAD-E2DD-4EEA-B993-2AB90F32B8E4} - {241680C6-55ED-42DD-ABAB-9CA76CA649A3} = {D425983A-9FCE-41E1-BA09-07EB9355EEEC} - {B459FB80-74C6-4988-BE65-B0FE84EF0632} = {1D445339-DB00-4A4D-B7C1-6F112A46CFF6} - {0DBBB371-B1FC-421E-A4FB-900B016AFE6A} = {A3275CEC-C5CB-4F22-875A-8270B5F4D698} - {03A07A13-D9F3-4E70-B4D2-57BA2CF1E8DB} = {099F0FD1-645D-4029-8149-46523AD34933} - {EDE83705-EFEA-46DC-A8EE-68A5D8159B84} = {3F453010-BA07-471D-87E5-B12346ED81EF} - {48F376EC-B951-4123-AF33-54217AD00B96} = {E47CDAF7-1046-4886-A0CB-ADF9650F8318} - {CDA6B0F4-389E-48C5-99CF-E2F1DB1163C2} = {E38F0CBE-BCFF-4F75-AA19-1959B7B75EF6} - {068D6BBE-BB98-40FF-84E1-D34166263623} = {78413EF4-17A8-49DD-9E4C-D15BF547AEEB} - {46BC00EE-3265-4B85-819E-0C28F16134C3} = {78413EF4-17A8-49DD-9E4C-D15BF547AEEB} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {A3905D9F-6EF7-4BFD-80B3-E0DD6AA82228} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.TaskManagement.sln b/aspnet-core/LINGYUN.MicroService.TaskManagement.sln deleted file mode 100644 index 839e46cfe..000000000 --- a/aspnet-core/LINGYUN.MicroService.TaskManagement.sln +++ /dev/null @@ -1,578 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 18 -VisualStudioVersion = 18.0.11205.157 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{8DA8A2EE-0B26-487E-A6C4-518906E92B1B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{C38EB7EF-BAE9-4129-862A-71C652B81775}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{77341F31-F54C-436A-AF8D-F78D91303C45}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain.Shared", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain.Shared\LINGYUN.Abp.TaskManagement.Domain.Shared.csproj", "{691CD138-9FFA-4988-BAC4-A32F0DAE1090}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain\LINGYUN.Abp.TaskManagement.Domain.csproj", "{8873A651-4F83-43B3-A34E-7AAA8A3ED4CF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application.Contracts", "modules\task-management\LINGYUN.Abp.TaskManagement.Application.Contracts\LINGYUN.Abp.TaskManagement.Application.Contracts.csproj", "{D5EC4CA0-7E16-4D17-B08E-E162EF332C77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Application", "modules\task-management\LINGYUN.Abp.TaskManagement.Application\LINGYUN.Abp.TaskManagement.Application.csproj", "{09039DDF-5B0E-4670-8055-CC0BE82D4D2C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi\LINGYUN.Abp.TaskManagement.HttpApi.csproj", "{283B0039-F67C-41F7-B554-DF5EE9178C4A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.EntityFrameworkCore", "modules\task-management\LINGYUN.Abp.TaskManagement.EntityFrameworkCore\LINGYUN.Abp.TaskManagement.EntityFrameworkCore.csproj", "{B8AB5E9B-9711-470E-8072-7444579EC5F6}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "Solution Items", "Solution Items", "{C99728F6-FB3C-4D26-8917-1D30725209B9}" - ProjectSection(SolutionItems) = preProject - .editorconfig = .editorconfig - ..\common.props = ..\common.props - ..\common.secrets.props = ..\common.secrets.props - ..\configureawait.props = ..\configureawait.props - ..\Directory.Build.props = ..\Directory.Build.props - ..\Directory.Packages.props = ..\Directory.Packages.props - ..\NuGet.Config = ..\NuGet.Config - EndProjectSection -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "provider", "provider", "{385578CC-C0F1-4377-A7A2-682B8F416234}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks", "modules\task-management\LINGYUN.Abp.BackgroundTasks\LINGYUN.Abp.BackgroundTasks.csproj", "{AC0B4342-9C9B-41E6-9646-E505C763EE77}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Quartz", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Quartz\LINGYUN.Abp.BackgroundTasks.Quartz.csproj", "{7051C251-11D0-4971-B13E-F6929AE6DE89}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.TaskManagement.HttpApi.Host", "services\LY.MicroService.TaskManagement.HttpApi.Host\LY.MicroService.TaskManagement.HttpApi.Host.csproj", "{E8022994-A19F-4540-B9D1-7EF4AA85D18A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{4A049C32-55F2-4A5F-954A-C8A977C2D87F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Jobs", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Jobs\LINGYUN.Abp.BackgroundTasks.Jobs.csproj", "{4C59F590-AA6C-4C46-8060-DA65D8305980}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.ExceptionHandling", "modules\task-management\LINGYUN.Abp.BackgroundTasks.ExceptionHandling\LINGYUN.Abp.BackgroundTasks.ExceptionHandling.csproj", "{8507BBFA-FE56-4426-BBFA-C92906CB8407}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.HttpApi.Client", "modules\task-management\LINGYUN.Abp.TaskManagement.HttpApi.Client\LINGYUN.Abp.TaskManagement.HttpApi.Client.csproj", "{56C759D1-6FE6-4111-A2DB-CD65DCE82061}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.TaskManagement", "modules\task-management\LINGYUN.Abp.BackgroundTasks.TaskManagement\LINGYUN.Abp.BackgroundTasks.TaskManagement.csproj", "{7937785C-0D28-46B3-A7E7-0B592821A1F2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.EventBus", "modules\task-management\LINGYUN.Abp.BackgroundTasks.EventBus\LINGYUN.Abp.BackgroundTasks.EventBus.csproj", "{D17DEF79-635B-478D-89D7-32EAE616869A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.DistributedLocking", "modules\task-management\LINGYUN.Abp.BackgroundTasks.DistributedLocking\LINGYUN.Abp.BackgroundTasks.DistributedLocking.csproj", "{A817B7B7-A225-404A-A301-B42D400DE4B7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Activities", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Activities\LINGYUN.Abp.BackgroundTasks.Activities.csproj", "{3D0A1901-36FB-4DA2-9F8D-05308598E98C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "extend-jobs", "extend-jobs", "{A9536BD2-2573-44CA-B033-DC16B7E345E5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Jobs", "modules\task-management\LINGYUN.Abp.Notifications.Jobs\LINGYUN.Abp.Notifications.Jobs.csproj", "{17D7ED0F-E789-4637-9B06-57DF693C6E1E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Notifications", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Notifications\LINGYUN.Abp.BackgroundTasks.Notifications.csproj", "{1978B64C-B2F5-4F68-9E5C-B45F948E7155}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{18918B94-BB48-48F3-874D-B91B0252440A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{23620224-93A1-4A88-93B7-23D37929FCF7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{09F7171C-6DA1-4466-AB4A-DC92E93368EC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{FA5E30C9-05E3-4E35-AEDD-7DC5534E3A01}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{2FA23894-E598-4896-A336-3E7C682699D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{194DAB61-BC3C-4003-BFF0-C87763E7B8B0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{DD51A1AE-830F-4909-A729-7EBC398B17AD}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "exten-plugin", "exten-plugin", "{B38D2141-AC0F-4F4A-9315-4292E3856C15}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Linq.Dynamic.Queryable", "framework\dynamic-queryable\LINGYUN.Linq.Dynamic.Queryable\LINGYUN.Linq.Dynamic.Queryable.csproj", "{3EE8383C-6F25-4BCD-8852-B23D1C864324}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application.Contracts", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts\LINGYUN.Abp.Dynamic.Queryable.Application.Contracts.csproj", "{B54F200C-D648-477B-BE39-B40A1D956F13}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.Application", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.Application\LINGYUN.Abp.Dynamic.Queryable.Application.csproj", "{FEC5FD25-9B26-4245-88D8-7621B26C7C3A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dynamic.Queryable.HttpApi", "framework\dynamic-queryable\LINGYUN.Abp.Dynamic.Queryable.HttpApi\LINGYUN.Abp.Dynamic.Queryable.HttpApi.csproj", "{DF963ABB-E713-49E9-A03C-DEB431E369DF}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{820A8FA4-17C4-44DF-8C31-9F211D00F790}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.TaskManagement.DbMigrator", "migrations\LY.MicroService.TaskManagement.DbMigrator\LY.MicroService.TaskManagement.DbMigrator.csproj", "{52FD8F39-0AB6-4C51-A584-187C219AC8B5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.TaskManagement.EntityFrameworkCore", "migrations\LY.MicroService.TaskManagement.EntityFrameworkCore\LY.MicroService.TaskManagement.EntityFrameworkCore.csproj", "{58F51875-6D2C-4A65-9DD3-8BC004B39B72}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elasticsearch", "elasticsearch", "{DC7ACD8B-044B-435D-94C5-06C75A8BD026}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{167CE485-72D3-4E95-80B1-00430CBB8888}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch.Jobs", "modules\task-management\LINGYUN.Abp.Elasticsearch.Jobs\LINGYUN.Abp.Elasticsearch.Jobs.csproj", "{798FEFB4-B65F-4B6C-A36D-611DD71A48AB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{5A41C31A-B966-418B-B446-5BA1D7E61A62}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{6A82AEB7-A048-420A-ACFB-94DC52ADADDC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{8EB3C845-BF73-446D-8C5D-FE855CFF2A90}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{8729BEEB-CABF-4B3B-8228-8AEE2E760796}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{AC15003C-473B-4049-B268-DE02ECD58097}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{AC99FAF5-6321-447A-BB13-41CAAEA3E459}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{3FDE2E70-EA02-4296-BA1A-ADABA5054DD1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{F72E1F2E-0064-4159-9327-884D7CB83D48}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{0979BDAB-B4D3-48DD-88EC-64AED972B8FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{83FCF202-0625-46BB-96CD-4D9D684508FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{6BAABDAC-C172-419D-A75D-E7823C86E871}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{988BDB8E-FD0D-457B-8B45-CFFD70CCB203}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{97271BF5-D965-4EE1-A2DD-58ADD35B529D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{CA5D2340-00EF-4248-A288-A9244A1C6A61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{DC42B5FE-C5EA-49A7-A92A-3F19D82009E3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{469D4CA9-D6C8-4A47-8795-31D5AA81B4AD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{6E030005-EEA7-480E-9E68-4FC74CFCAF42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{B3E81983-629A-4380-B4C2-50E247916F5E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{088064DD-D141-4E9A-B185-E332920A323A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Security", "framework\security\LINGYUN.Abp.Security\LINGYUN.Abp.Security.csproj", "{BEE1B759-5B65-481B-928B-8BC6A89A7C13}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{F36E71F7-B05F-4513-A923-81E2A7474EAE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{94D1C512-09E4-4A68-8989-6DB49FEABA67}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{96B4D255-BB21-4BAF-902A-ADE3F25A44C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi.Client", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi.Client\LINGYUN.Abp.OssManagement.HttpApi.Client.csproj", "{44778F3C-7610-4F1C-A2B6-DF8925B1CBE0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Tests", "tests\LINGYUN.Abp.BackgroundTasks.Tests\LINGYUN.Abp.BackgroundTasks.Tests.csproj", "{A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{6CC06BD8-FA30-45E0-BD3A-25FF39906EF5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Activities.Tests", "tests\LINGYUN.Abp.BackgroundTasks.Activities.Tests\LINGYUN.Abp.BackgroundTasks.Activities.Tests.csproj", "{3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{34042B8E-B896-4E5E-A243-31E2802264CE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{16C5E2EC-7A8F-2697-F611-0F2C22087192}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.HttpApi.Client", "modules\platform\LINGYUN.Platform.HttpApi.Client\LINGYUN.Platform.HttpApi.Client.csproj", "{0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform", "modules\platform\LINGYUN.Abp.Emailing.Platform\LINGYUN.Abp.Emailing.Platform.csproj", "{8BAB6A91-865C-A599-BE2A-7C487129D83A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform", "modules\platform\LINGYUN.Abp.Sms.Platform\LINGYUN.Abp.Sms.Platform.csproj", "{8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.MySqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.MySqlInstaller\LINGYUN.Abp.Quartz.MySqlInstaller.csproj", "{B6452D3F-E58C-C433-E52A-F65EE2657E01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlServerInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlServerInstaller\LINGYUN.Abp.Quartz.SqlServerInstaller.csproj", "{D613F393-9CEE-2D3B-33C9-90630F8348E7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlInstaller\LINGYUN.Abp.Quartz.SqlInstaller.csproj", "{0EEA73CA-D8DD-F044-045D-F070F8831E26}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{DE7B8B71-635D-4113-AA49-B218D6998CEC}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{1CC72170-6771-46A2-CDE4-57D826E3C841}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{F58A7141-AC0D-26EC-F22A-DF0DB1BA6955}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.MultiTenancy.Saas", "modules\saas\LINGYUN.Abp.MultiTenancy.Saas\LINGYUN.Abp.MultiTenancy.Saas.csproj", "{E09374FE-6B13-D69E-B171-94C63E6B80E5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{164E4514-4E84-F13A-E24E-2A743753CDB3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.PostgresSqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.PostgresSqlInstaller\LINGYUN.Abp.Quartz.PostgresSqlInstaller.csproj", "{CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {691CD138-9FFA-4988-BAC4-A32F0DAE1090}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {691CD138-9FFA-4988-BAC4-A32F0DAE1090}.Debug|Any CPU.Build.0 = Debug|Any CPU - {691CD138-9FFA-4988-BAC4-A32F0DAE1090}.Release|Any CPU.ActiveCfg = Release|Any CPU - {691CD138-9FFA-4988-BAC4-A32F0DAE1090}.Release|Any CPU.Build.0 = Release|Any CPU - {8873A651-4F83-43B3-A34E-7AAA8A3ED4CF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8873A651-4F83-43B3-A34E-7AAA8A3ED4CF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8873A651-4F83-43B3-A34E-7AAA8A3ED4CF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8873A651-4F83-43B3-A34E-7AAA8A3ED4CF}.Release|Any CPU.Build.0 = Release|Any CPU - {D5EC4CA0-7E16-4D17-B08E-E162EF332C77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5EC4CA0-7E16-4D17-B08E-E162EF332C77}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5EC4CA0-7E16-4D17-B08E-E162EF332C77}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5EC4CA0-7E16-4D17-B08E-E162EF332C77}.Release|Any CPU.Build.0 = Release|Any CPU - {09039DDF-5B0E-4670-8055-CC0BE82D4D2C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09039DDF-5B0E-4670-8055-CC0BE82D4D2C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09039DDF-5B0E-4670-8055-CC0BE82D4D2C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09039DDF-5B0E-4670-8055-CC0BE82D4D2C}.Release|Any CPU.Build.0 = Release|Any CPU - {283B0039-F67C-41F7-B554-DF5EE9178C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {283B0039-F67C-41F7-B554-DF5EE9178C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {283B0039-F67C-41F7-B554-DF5EE9178C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {283B0039-F67C-41F7-B554-DF5EE9178C4A}.Release|Any CPU.Build.0 = Release|Any CPU - {B8AB5E9B-9711-470E-8072-7444579EC5F6}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B8AB5E9B-9711-470E-8072-7444579EC5F6}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B8AB5E9B-9711-470E-8072-7444579EC5F6}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B8AB5E9B-9711-470E-8072-7444579EC5F6}.Release|Any CPU.Build.0 = Release|Any CPU - {AC0B4342-9C9B-41E6-9646-E505C763EE77}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC0B4342-9C9B-41E6-9646-E505C763EE77}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC0B4342-9C9B-41E6-9646-E505C763EE77}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC0B4342-9C9B-41E6-9646-E505C763EE77}.Release|Any CPU.Build.0 = Release|Any CPU - {7051C251-11D0-4971-B13E-F6929AE6DE89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7051C251-11D0-4971-B13E-F6929AE6DE89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7051C251-11D0-4971-B13E-F6929AE6DE89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7051C251-11D0-4971-B13E-F6929AE6DE89}.Release|Any CPU.Build.0 = Release|Any CPU - {E8022994-A19F-4540-B9D1-7EF4AA85D18A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E8022994-A19F-4540-B9D1-7EF4AA85D18A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E8022994-A19F-4540-B9D1-7EF4AA85D18A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E8022994-A19F-4540-B9D1-7EF4AA85D18A}.Release|Any CPU.Build.0 = Release|Any CPU - {4A049C32-55F2-4A5F-954A-C8A977C2D87F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4A049C32-55F2-4A5F-954A-C8A977C2D87F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4A049C32-55F2-4A5F-954A-C8A977C2D87F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4A049C32-55F2-4A5F-954A-C8A977C2D87F}.Release|Any CPU.Build.0 = Release|Any CPU - {4C59F590-AA6C-4C46-8060-DA65D8305980}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4C59F590-AA6C-4C46-8060-DA65D8305980}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4C59F590-AA6C-4C46-8060-DA65D8305980}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4C59F590-AA6C-4C46-8060-DA65D8305980}.Release|Any CPU.Build.0 = Release|Any CPU - {8507BBFA-FE56-4426-BBFA-C92906CB8407}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8507BBFA-FE56-4426-BBFA-C92906CB8407}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8507BBFA-FE56-4426-BBFA-C92906CB8407}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8507BBFA-FE56-4426-BBFA-C92906CB8407}.Release|Any CPU.Build.0 = Release|Any CPU - {56C759D1-6FE6-4111-A2DB-CD65DCE82061}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56C759D1-6FE6-4111-A2DB-CD65DCE82061}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56C759D1-6FE6-4111-A2DB-CD65DCE82061}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56C759D1-6FE6-4111-A2DB-CD65DCE82061}.Release|Any CPU.Build.0 = Release|Any CPU - {7937785C-0D28-46B3-A7E7-0B592821A1F2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7937785C-0D28-46B3-A7E7-0B592821A1F2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7937785C-0D28-46B3-A7E7-0B592821A1F2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7937785C-0D28-46B3-A7E7-0B592821A1F2}.Release|Any CPU.Build.0 = Release|Any CPU - {D17DEF79-635B-478D-89D7-32EAE616869A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D17DEF79-635B-478D-89D7-32EAE616869A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D17DEF79-635B-478D-89D7-32EAE616869A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D17DEF79-635B-478D-89D7-32EAE616869A}.Release|Any CPU.Build.0 = Release|Any CPU - {A817B7B7-A225-404A-A301-B42D400DE4B7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A817B7B7-A225-404A-A301-B42D400DE4B7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A817B7B7-A225-404A-A301-B42D400DE4B7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A817B7B7-A225-404A-A301-B42D400DE4B7}.Release|Any CPU.Build.0 = Release|Any CPU - {3D0A1901-36FB-4DA2-9F8D-05308598E98C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3D0A1901-36FB-4DA2-9F8D-05308598E98C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3D0A1901-36FB-4DA2-9F8D-05308598E98C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3D0A1901-36FB-4DA2-9F8D-05308598E98C}.Release|Any CPU.Build.0 = Release|Any CPU - {17D7ED0F-E789-4637-9B06-57DF693C6E1E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17D7ED0F-E789-4637-9B06-57DF693C6E1E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17D7ED0F-E789-4637-9B06-57DF693C6E1E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17D7ED0F-E789-4637-9B06-57DF693C6E1E}.Release|Any CPU.Build.0 = Release|Any CPU - {1978B64C-B2F5-4F68-9E5C-B45F948E7155}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1978B64C-B2F5-4F68-9E5C-B45F948E7155}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1978B64C-B2F5-4F68-9E5C-B45F948E7155}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1978B64C-B2F5-4F68-9E5C-B45F948E7155}.Release|Any CPU.Build.0 = Release|Any CPU - {23620224-93A1-4A88-93B7-23D37929FCF7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23620224-93A1-4A88-93B7-23D37929FCF7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23620224-93A1-4A88-93B7-23D37929FCF7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23620224-93A1-4A88-93B7-23D37929FCF7}.Release|Any CPU.Build.0 = Release|Any CPU - {09F7171C-6DA1-4466-AB4A-DC92E93368EC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09F7171C-6DA1-4466-AB4A-DC92E93368EC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09F7171C-6DA1-4466-AB4A-DC92E93368EC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09F7171C-6DA1-4466-AB4A-DC92E93368EC}.Release|Any CPU.Build.0 = Release|Any CPU - {2FA23894-E598-4896-A336-3E7C682699D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2FA23894-E598-4896-A336-3E7C682699D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2FA23894-E598-4896-A336-3E7C682699D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2FA23894-E598-4896-A336-3E7C682699D9}.Release|Any CPU.Build.0 = Release|Any CPU - {194DAB61-BC3C-4003-BFF0-C87763E7B8B0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {194DAB61-BC3C-4003-BFF0-C87763E7B8B0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {194DAB61-BC3C-4003-BFF0-C87763E7B8B0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {194DAB61-BC3C-4003-BFF0-C87763E7B8B0}.Release|Any CPU.Build.0 = Release|Any CPU - {DD51A1AE-830F-4909-A729-7EBC398B17AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DD51A1AE-830F-4909-A729-7EBC398B17AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DD51A1AE-830F-4909-A729-7EBC398B17AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DD51A1AE-830F-4909-A729-7EBC398B17AD}.Release|Any CPU.Build.0 = Release|Any CPU - {3EE8383C-6F25-4BCD-8852-B23D1C864324}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EE8383C-6F25-4BCD-8852-B23D1C864324}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EE8383C-6F25-4BCD-8852-B23D1C864324}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EE8383C-6F25-4BCD-8852-B23D1C864324}.Release|Any CPU.Build.0 = Release|Any CPU - {B54F200C-D648-477B-BE39-B40A1D956F13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B54F200C-D648-477B-BE39-B40A1D956F13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B54F200C-D648-477B-BE39-B40A1D956F13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B54F200C-D648-477B-BE39-B40A1D956F13}.Release|Any CPU.Build.0 = Release|Any CPU - {FEC5FD25-9B26-4245-88D8-7621B26C7C3A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FEC5FD25-9B26-4245-88D8-7621B26C7C3A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FEC5FD25-9B26-4245-88D8-7621B26C7C3A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FEC5FD25-9B26-4245-88D8-7621B26C7C3A}.Release|Any CPU.Build.0 = Release|Any CPU - {DF963ABB-E713-49E9-A03C-DEB431E369DF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DF963ABB-E713-49E9-A03C-DEB431E369DF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DF963ABB-E713-49E9-A03C-DEB431E369DF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DF963ABB-E713-49E9-A03C-DEB431E369DF}.Release|Any CPU.Build.0 = Release|Any CPU - {52FD8F39-0AB6-4C51-A584-187C219AC8B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52FD8F39-0AB6-4C51-A584-187C219AC8B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52FD8F39-0AB6-4C51-A584-187C219AC8B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52FD8F39-0AB6-4C51-A584-187C219AC8B5}.Release|Any CPU.Build.0 = Release|Any CPU - {58F51875-6D2C-4A65-9DD3-8BC004B39B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {58F51875-6D2C-4A65-9DD3-8BC004B39B72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {58F51875-6D2C-4A65-9DD3-8BC004B39B72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {58F51875-6D2C-4A65-9DD3-8BC004B39B72}.Release|Any CPU.Build.0 = Release|Any CPU - {167CE485-72D3-4E95-80B1-00430CBB8888}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {167CE485-72D3-4E95-80B1-00430CBB8888}.Debug|Any CPU.Build.0 = Debug|Any CPU - {167CE485-72D3-4E95-80B1-00430CBB8888}.Release|Any CPU.ActiveCfg = Release|Any CPU - {167CE485-72D3-4E95-80B1-00430CBB8888}.Release|Any CPU.Build.0 = Release|Any CPU - {798FEFB4-B65F-4B6C-A36D-611DD71A48AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {798FEFB4-B65F-4B6C-A36D-611DD71A48AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {798FEFB4-B65F-4B6C-A36D-611DD71A48AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {798FEFB4-B65F-4B6C-A36D-611DD71A48AB}.Release|Any CPU.Build.0 = Release|Any CPU - {6A82AEB7-A048-420A-ACFB-94DC52ADADDC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A82AEB7-A048-420A-ACFB-94DC52ADADDC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A82AEB7-A048-420A-ACFB-94DC52ADADDC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A82AEB7-A048-420A-ACFB-94DC52ADADDC}.Release|Any CPU.Build.0 = Release|Any CPU - {8EB3C845-BF73-446D-8C5D-FE855CFF2A90}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8EB3C845-BF73-446D-8C5D-FE855CFF2A90}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8EB3C845-BF73-446D-8C5D-FE855CFF2A90}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8EB3C845-BF73-446D-8C5D-FE855CFF2A90}.Release|Any CPU.Build.0 = Release|Any CPU - {8729BEEB-CABF-4B3B-8228-8AEE2E760796}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8729BEEB-CABF-4B3B-8228-8AEE2E760796}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8729BEEB-CABF-4B3B-8228-8AEE2E760796}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8729BEEB-CABF-4B3B-8228-8AEE2E760796}.Release|Any CPU.Build.0 = Release|Any CPU - {AC15003C-473B-4049-B268-DE02ECD58097}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC15003C-473B-4049-B268-DE02ECD58097}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC15003C-473B-4049-B268-DE02ECD58097}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC15003C-473B-4049-B268-DE02ECD58097}.Release|Any CPU.Build.0 = Release|Any CPU - {AC99FAF5-6321-447A-BB13-41CAAEA3E459}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AC99FAF5-6321-447A-BB13-41CAAEA3E459}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AC99FAF5-6321-447A-BB13-41CAAEA3E459}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AC99FAF5-6321-447A-BB13-41CAAEA3E459}.Release|Any CPU.Build.0 = Release|Any CPU - {3FDE2E70-EA02-4296-BA1A-ADABA5054DD1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3FDE2E70-EA02-4296-BA1A-ADABA5054DD1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3FDE2E70-EA02-4296-BA1A-ADABA5054DD1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3FDE2E70-EA02-4296-BA1A-ADABA5054DD1}.Release|Any CPU.Build.0 = Release|Any CPU - {F72E1F2E-0064-4159-9327-884D7CB83D48}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F72E1F2E-0064-4159-9327-884D7CB83D48}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F72E1F2E-0064-4159-9327-884D7CB83D48}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F72E1F2E-0064-4159-9327-884D7CB83D48}.Release|Any CPU.Build.0 = Release|Any CPU - {0979BDAB-B4D3-48DD-88EC-64AED972B8FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0979BDAB-B4D3-48DD-88EC-64AED972B8FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0979BDAB-B4D3-48DD-88EC-64AED972B8FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0979BDAB-B4D3-48DD-88EC-64AED972B8FC}.Release|Any CPU.Build.0 = Release|Any CPU - {83FCF202-0625-46BB-96CD-4D9D684508FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83FCF202-0625-46BB-96CD-4D9D684508FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83FCF202-0625-46BB-96CD-4D9D684508FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83FCF202-0625-46BB-96CD-4D9D684508FC}.Release|Any CPU.Build.0 = Release|Any CPU - {6BAABDAC-C172-419D-A75D-E7823C86E871}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6BAABDAC-C172-419D-A75D-E7823C86E871}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6BAABDAC-C172-419D-A75D-E7823C86E871}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6BAABDAC-C172-419D-A75D-E7823C86E871}.Release|Any CPU.Build.0 = Release|Any CPU - {988BDB8E-FD0D-457B-8B45-CFFD70CCB203}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {988BDB8E-FD0D-457B-8B45-CFFD70CCB203}.Debug|Any CPU.Build.0 = Debug|Any CPU - {988BDB8E-FD0D-457B-8B45-CFFD70CCB203}.Release|Any CPU.ActiveCfg = Release|Any CPU - {988BDB8E-FD0D-457B-8B45-CFFD70CCB203}.Release|Any CPU.Build.0 = Release|Any CPU - {CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE}.Release|Any CPU.Build.0 = Release|Any CPU - {97271BF5-D965-4EE1-A2DD-58ADD35B529D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {97271BF5-D965-4EE1-A2DD-58ADD35B529D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {97271BF5-D965-4EE1-A2DD-58ADD35B529D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {97271BF5-D965-4EE1-A2DD-58ADD35B529D}.Release|Any CPU.Build.0 = Release|Any CPU - {CA5D2340-00EF-4248-A288-A9244A1C6A61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CA5D2340-00EF-4248-A288-A9244A1C6A61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CA5D2340-00EF-4248-A288-A9244A1C6A61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CA5D2340-00EF-4248-A288-A9244A1C6A61}.Release|Any CPU.Build.0 = Release|Any CPU - {DC42B5FE-C5EA-49A7-A92A-3F19D82009E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC42B5FE-C5EA-49A7-A92A-3F19D82009E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC42B5FE-C5EA-49A7-A92A-3F19D82009E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC42B5FE-C5EA-49A7-A92A-3F19D82009E3}.Release|Any CPU.Build.0 = Release|Any CPU - {469D4CA9-D6C8-4A47-8795-31D5AA81B4AD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {469D4CA9-D6C8-4A47-8795-31D5AA81B4AD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {469D4CA9-D6C8-4A47-8795-31D5AA81B4AD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {469D4CA9-D6C8-4A47-8795-31D5AA81B4AD}.Release|Any CPU.Build.0 = Release|Any CPU - {6E030005-EEA7-480E-9E68-4FC74CFCAF42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6E030005-EEA7-480E-9E68-4FC74CFCAF42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6E030005-EEA7-480E-9E68-4FC74CFCAF42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6E030005-EEA7-480E-9E68-4FC74CFCAF42}.Release|Any CPU.Build.0 = Release|Any CPU - {B3E81983-629A-4380-B4C2-50E247916F5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3E81983-629A-4380-B4C2-50E247916F5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3E81983-629A-4380-B4C2-50E247916F5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3E81983-629A-4380-B4C2-50E247916F5E}.Release|Any CPU.Build.0 = Release|Any CPU - {088064DD-D141-4E9A-B185-E332920A323A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {088064DD-D141-4E9A-B185-E332920A323A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {088064DD-D141-4E9A-B185-E332920A323A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {088064DD-D141-4E9A-B185-E332920A323A}.Release|Any CPU.Build.0 = Release|Any CPU - {BEE1B759-5B65-481B-928B-8BC6A89A7C13}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BEE1B759-5B65-481B-928B-8BC6A89A7C13}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BEE1B759-5B65-481B-928B-8BC6A89A7C13}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BEE1B759-5B65-481B-928B-8BC6A89A7C13}.Release|Any CPU.Build.0 = Release|Any CPU - {94D1C512-09E4-4A68-8989-6DB49FEABA67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {94D1C512-09E4-4A68-8989-6DB49FEABA67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {94D1C512-09E4-4A68-8989-6DB49FEABA67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {94D1C512-09E4-4A68-8989-6DB49FEABA67}.Release|Any CPU.Build.0 = Release|Any CPU - {96B4D255-BB21-4BAF-902A-ADE3F25A44C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96B4D255-BB21-4BAF-902A-ADE3F25A44C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96B4D255-BB21-4BAF-902A-ADE3F25A44C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96B4D255-BB21-4BAF-902A-ADE3F25A44C2}.Release|Any CPU.Build.0 = Release|Any CPU - {44778F3C-7610-4F1C-A2B6-DF8925B1CBE0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44778F3C-7610-4F1C-A2B6-DF8925B1CBE0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44778F3C-7610-4F1C-A2B6-DF8925B1CBE0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44778F3C-7610-4F1C-A2B6-DF8925B1CBE0}.Release|Any CPU.Build.0 = Release|Any CPU - {A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C}.Release|Any CPU.Build.0 = Release|Any CPU - {6CC06BD8-FA30-45E0-BD3A-25FF39906EF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6CC06BD8-FA30-45E0-BD3A-25FF39906EF5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6CC06BD8-FA30-45E0-BD3A-25FF39906EF5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6CC06BD8-FA30-45E0-BD3A-25FF39906EF5}.Release|Any CPU.Build.0 = Release|Any CPU - {3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07}.Release|Any CPU.Build.0 = Release|Any CPU - {34042B8E-B896-4E5E-A243-31E2802264CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {34042B8E-B896-4E5E-A243-31E2802264CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {34042B8E-B896-4E5E-A243-31E2802264CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {34042B8E-B896-4E5E-A243-31E2802264CE}.Release|Any CPU.Build.0 = Release|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Release|Any CPU.Build.0 = Release|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Release|Any CPU.Build.0 = Release|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Release|Any CPU.Build.0 = Release|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Release|Any CPU.Build.0 = Release|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Release|Any CPU.Build.0 = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.Build.0 = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.Build.0 = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.Build.0 = Release|Any CPU - {1CC72170-6771-46A2-CDE4-57D826E3C841}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1CC72170-6771-46A2-CDE4-57D826E3C841}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1CC72170-6771-46A2-CDE4-57D826E3C841}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1CC72170-6771-46A2-CDE4-57D826E3C841}.Release|Any CPU.Build.0 = Release|Any CPU - {618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C}.Release|Any CPU.Build.0 = Release|Any CPU - {F58A7141-AC0D-26EC-F22A-DF0DB1BA6955}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F58A7141-AC0D-26EC-F22A-DF0DB1BA6955}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F58A7141-AC0D-26EC-F22A-DF0DB1BA6955}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F58A7141-AC0D-26EC-F22A-DF0DB1BA6955}.Release|Any CPU.Build.0 = Release|Any CPU - {E09374FE-6B13-D69E-B171-94C63E6B80E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E09374FE-6B13-D69E-B171-94C63E6B80E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E09374FE-6B13-D69E-B171-94C63E6B80E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E09374FE-6B13-D69E-B171-94C63E6B80E5}.Release|Any CPU.Build.0 = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.Build.0 = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {691CD138-9FFA-4988-BAC4-A32F0DAE1090} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {8873A651-4F83-43B3-A34E-7AAA8A3ED4CF} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {D5EC4CA0-7E16-4D17-B08E-E162EF332C77} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {09039DDF-5B0E-4670-8055-CC0BE82D4D2C} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {283B0039-F67C-41F7-B554-DF5EE9178C4A} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {B8AB5E9B-9711-470E-8072-7444579EC5F6} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {AC0B4342-9C9B-41E6-9646-E505C763EE77} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {7051C251-11D0-4971-B13E-F6929AE6DE89} = {385578CC-C0F1-4377-A7A2-682B8F416234} - {E8022994-A19F-4540-B9D1-7EF4AA85D18A} = {8DA8A2EE-0B26-487E-A6C4-518906E92B1B} - {4A049C32-55F2-4A5F-954A-C8A977C2D87F} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {4C59F590-AA6C-4C46-8060-DA65D8305980} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {8507BBFA-FE56-4426-BBFA-C92906CB8407} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {56C759D1-6FE6-4111-A2DB-CD65DCE82061} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {7937785C-0D28-46B3-A7E7-0B592821A1F2} = {385578CC-C0F1-4377-A7A2-682B8F416234} - {D17DEF79-635B-478D-89D7-32EAE616869A} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {A817B7B7-A225-404A-A301-B42D400DE4B7} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {3D0A1901-36FB-4DA2-9F8D-05308598E98C} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {17D7ED0F-E789-4637-9B06-57DF693C6E1E} = {A9536BD2-2573-44CA-B033-DC16B7E345E5} - {1978B64C-B2F5-4F68-9E5C-B45F948E7155} = {C38EB7EF-BAE9-4129-862A-71C652B81775} - {23620224-93A1-4A88-93B7-23D37929FCF7} = {18918B94-BB48-48F3-874D-B91B0252440A} - {09F7171C-6DA1-4466-AB4A-DC92E93368EC} = {18918B94-BB48-48F3-874D-B91B0252440A} - {2FA23894-E598-4896-A336-3E7C682699D9} = {FA5E30C9-05E3-4E35-AEDD-7DC5534E3A01} - {194DAB61-BC3C-4003-BFF0-C87763E7B8B0} = {FA5E30C9-05E3-4E35-AEDD-7DC5534E3A01} - {DD51A1AE-830F-4909-A729-7EBC398B17AD} = {18918B94-BB48-48F3-874D-B91B0252440A} - {3EE8383C-6F25-4BCD-8852-B23D1C864324} = {B38D2141-AC0F-4F4A-9315-4292E3856C15} - {B54F200C-D648-477B-BE39-B40A1D956F13} = {B38D2141-AC0F-4F4A-9315-4292E3856C15} - {FEC5FD25-9B26-4245-88D8-7621B26C7C3A} = {B38D2141-AC0F-4F4A-9315-4292E3856C15} - {DF963ABB-E713-49E9-A03C-DEB431E369DF} = {B38D2141-AC0F-4F4A-9315-4292E3856C15} - {52FD8F39-0AB6-4C51-A584-187C219AC8B5} = {820A8FA4-17C4-44DF-8C31-9F211D00F790} - {58F51875-6D2C-4A65-9DD3-8BC004B39B72} = {820A8FA4-17C4-44DF-8C31-9F211D00F790} - {167CE485-72D3-4E95-80B1-00430CBB8888} = {DC7ACD8B-044B-435D-94C5-06C75A8BD026} - {798FEFB4-B65F-4B6C-A36D-611DD71A48AB} = {A9536BD2-2573-44CA-B033-DC16B7E345E5} - {6A82AEB7-A048-420A-ACFB-94DC52ADADDC} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {8EB3C845-BF73-446D-8C5D-FE855CFF2A90} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {8729BEEB-CABF-4B3B-8228-8AEE2E760796} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {AC15003C-473B-4049-B268-DE02ECD58097} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {AC99FAF5-6321-447A-BB13-41CAAEA3E459} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {3FDE2E70-EA02-4296-BA1A-ADABA5054DD1} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {F72E1F2E-0064-4159-9327-884D7CB83D48} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {0979BDAB-B4D3-48DD-88EC-64AED972B8FC} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {83FCF202-0625-46BB-96CD-4D9D684508FC} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {6BAABDAC-C172-419D-A75D-E7823C86E871} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {988BDB8E-FD0D-457B-8B45-CFFD70CCB203} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {CD88BE12-F08D-40AB-9D13-63D6DC5B9DAE} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {97271BF5-D965-4EE1-A2DD-58ADD35B529D} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {CA5D2340-00EF-4248-A288-A9244A1C6A61} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {DC42B5FE-C5EA-49A7-A92A-3F19D82009E3} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {469D4CA9-D6C8-4A47-8795-31D5AA81B4AD} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {6E030005-EEA7-480E-9E68-4FC74CFCAF42} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {B3E81983-629A-4380-B4C2-50E247916F5E} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {088064DD-D141-4E9A-B185-E332920A323A} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {BEE1B759-5B65-481B-928B-8BC6A89A7C13} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {94D1C512-09E4-4A68-8989-6DB49FEABA67} = {F36E71F7-B05F-4513-A923-81E2A7474EAE} - {96B4D255-BB21-4BAF-902A-ADE3F25A44C2} = {F36E71F7-B05F-4513-A923-81E2A7474EAE} - {44778F3C-7610-4F1C-A2B6-DF8925B1CBE0} = {F36E71F7-B05F-4513-A923-81E2A7474EAE} - {A8EFC95D-6700-4840-A7FD-1F5BF4D0C71C} = {77341F31-F54C-436A-AF8D-F78D91303C45} - {6CC06BD8-FA30-45E0-BD3A-25FF39906EF5} = {77341F31-F54C-436A-AF8D-F78D91303C45} - {3EBB4CA4-82C2-41C6-94C5-CB0D4D2B6D07} = {77341F31-F54C-436A-AF8D-F78D91303C45} - {34042B8E-B896-4E5E-A243-31E2802264CE} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {16C5E2EC-7A8F-2697-F611-0F2C22087192} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {8BAB6A91-865C-A599-BE2A-7C487129D83A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {B6452D3F-E58C-C433-E52A-F65EE2657E01} = {385578CC-C0F1-4377-A7A2-682B8F416234} - {D613F393-9CEE-2D3B-33C9-90630F8348E7} = {385578CC-C0F1-4377-A7A2-682B8F416234} - {0EEA73CA-D8DD-F044-045D-F070F8831E26} = {385578CC-C0F1-4377-A7A2-682B8F416234} - {1CC72170-6771-46A2-CDE4-57D826E3C841} = {DE7B8B71-635D-4113-AA49-B218D6998CEC} - {618C7EAF-8D6C-50B5-84E4-AE733CEA4A8C} = {DE7B8B71-635D-4113-AA49-B218D6998CEC} - {F58A7141-AC0D-26EC-F22A-DF0DB1BA6955} = {DE7B8B71-635D-4113-AA49-B218D6998CEC} - {E09374FE-6B13-D69E-B171-94C63E6B80E5} = {DE7B8B71-635D-4113-AA49-B218D6998CEC} - {164E4514-4E84-F13A-E24E-2A743753CDB3} = {5A41C31A-B966-418B-B446-5BA1D7E61A62} - {CD7B8501-57B7-6C0E-472F-4E9B894ED6C2} = {385578CC-C0F1-4377-A7A2-682B8F416234} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {E1FD1F4C-D344-408B-97CF-B6F1F6D7D293} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.TaskManagement.slnx b/aspnet-core/LINGYUN.MicroService.TaskManagement.slnx new file mode 100644 index 000000000..7707b7fc9 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.TaskManagement.slnx @@ -0,0 +1,117 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.WebhooksManagement.sln b/aspnet-core/LINGYUN.MicroService.WebhooksManagement.sln deleted file mode 100644 index f3e3bb9ff..000000000 --- a/aspnet-core/LINGYUN.MicroService.WebhooksManagement.sln +++ /dev/null @@ -1,547 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "src", "src", "{9BEC7A37-AECA-4096-B4B3-57A2172C1296}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{8052BB2D-93A3-4C1D-9B4C-7080DCDF5B36}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{FB7A9794-06D2-42CF-939E-4626497B97BD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks", "modules\webhooks\LINGYUN.Abp.Webhooks\LINGYUN.Abp.Webhooks.csproj", "{7DFE9385-2FFD-45CE-97B0-8FF4E967F19E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Domain.Shared", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain.Shared\LINGYUN.Abp.WebhooksManagement.Domain.Shared.csproj", "{B3953343-4067-4F12-8F2C-900761934E89}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Domain", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Domain\LINGYUN.Abp.WebhooksManagement.Domain.csproj", "{416F0E1F-3B52-421C-8E94-1DC9E4EE5949}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Application.Contracts", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application.Contracts\LINGYUN.Abp.WebhooksManagement.Application.Contracts.csproj", "{453C29F1-E52E-4DFE-A91A-5DE47611874D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Application", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Application\LINGYUN.Abp.WebhooksManagement.Application.csproj", "{3B356F97-5D0D-4306-A7C1-56696D581641}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore\LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore.csproj", "{75ED12F9-3884-453E-8EDE-481949BF177A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.HttpApi", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.HttpApi\LINGYUN.Abp.WebhooksManagement.HttpApi.csproj", "{0155C501-026B-4F58-A2BB-02518BBF1BB5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.HttpApi.Client", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.HttpApi.Client\LINGYUN.Abp.WebhooksManagement.HttpApi.Client.csproj", "{7E5850A0-4CC8-4AB5-8988-067B9B1A00EA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WebhooksManagement.Dapr.Client", "modules\webhooks\LINGYUN.Abp.WebhooksManagement.Dapr.Client\LINGYUN.Abp.WebhooksManagement.Dapr.Client.csproj", "{983F568C-3477-4B13-B3FC-95CE23BB2208}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WebhooksManagement.HttpApi.Host", "services\LY.MicroService.WebhooksManagement.HttpApi.Host\LY.MicroService.WebhooksManagement.HttpApi.Host.csproj", "{7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.ClientProxies", "modules\webhooks\LINGYUN.Abp.Webhooks.ClientProxies\LINGYUN.Abp.Webhooks.ClientProxies.csproj", "{F4966BE6-CC96-4C23-9363-3BE4103F02E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Identity", "modules\webhooks\LINGYUN.Abp.Webhooks.Identity\LINGYUN.Abp.Webhooks.Identity.csproj", "{93BB030A-EA01-4F08-BD41-0800D838162C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Saas", "modules\webhooks\LINGYUN.Abp.Webhooks.Saas\LINGYUN.Abp.Webhooks.Saas.csproj", "{D7F2B64C-02F2-4097-80C1-DC41CE8FEE38}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.EventBus", "modules\webhooks\LINGYUN.Abp.Webhooks.EventBus\LINGYUN.Abp.Webhooks.EventBus.csproj", "{46C08EF3-4C81-411E-B5E4-AC3A5040DC67}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Core", "modules\webhooks\LINGYUN.Abp.Webhooks.Core\LINGYUN.Abp.Webhooks.Core.csproj", "{BBF1C93D-EF73-4B00-919F-5E7F360BDB03}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "migrations", "migrations", "{2868332B-7D4F-4B43-8FC3-BA5CACC36C7E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WebhooksManagement.DbMigrator", "migrations\LY.MicroService.WebhooksManagement.DbMigrator\LY.MicroService.WebhooksManagement.DbMigrator.csproj", "{3BC77471-D273-4C9C-8985-7FE450DA4686}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WebhooksManagement.EntityFrameworkCore", "migrations\LY.MicroService.WebhooksManagement.EntityFrameworkCore\LY.MicroService.WebhooksManagement.EntityFrameworkCore.csproj", "{CC0BF1BE-A938-4BED-B5DD-AEA0235FF978}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks", "modules\task-management\LINGYUN.Abp.BackgroundTasks\LINGYUN.Abp.BackgroundTasks.csproj", "{B01A8350-EFA3-4080-9CD6-0E991F99578E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wrapper", "wrapper", "{4530BC52-D8D7-4022-B1E9-F327A0574835}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "dapr", "dapr", "{E677C08C-DF2A-44DB-A2E2-E491734F3D5B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr", "framework\dapr\LINGYUN.Abp.Dapr\LINGYUN.Abp.Dapr.csproj", "{FCA0D08C-9F5B-4933-899B-EDF72E868691}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client", "framework\dapr\LINGYUN.Abp.Dapr.Client\LINGYUN.Abp.Dapr.Client.csproj", "{FA12A8B4-255B-4619-B670-0F07C677C736}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Dapr.Client.Wrapper", "framework\dapr\LINGYUN.Abp.Dapr.Client.Wrapper\LINGYUN.Abp.Dapr.Client.Wrapper.csproj", "{37053701-FD7D-4204-BF82-4FEDE0A28E60}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{9AEE2B36-D7A7-4EA2-8A22-888E896012E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{FFE603F9-DB7E-45C8-9852-354363F9D799}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{E5060632-E9DF-44D4-BB82-B0C45A39BFF8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{AFB07F2B-4858-448D-8882-30A1142A0E7C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{80804006-EED4-4CEA-88F8-A8F45EDFBF0D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{2C948A5C-0BA4-40EE-8EAF-851D81077E7E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{56642E5F-B344-4C31-8501-ECDAADEA1C36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application.Contracts", "modules\saas\LINGYUN.Abp.Saas.Application.Contracts\LINGYUN.Abp.Saas.Application.Contracts.csproj", "{92CCFBCE-AF47-4F66-A900-FD29CDF284A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Application", "modules\saas\LINGYUN.Abp.Saas.Application\LINGYUN.Abp.Saas.Application.csproj", "{59B6ABC7-8492-46F2-8139-2551E5796D2A}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Quartz", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Quartz\LINGYUN.Abp.BackgroundTasks.Quartz.csproj", "{C5E82A68-9343-4BCB-AC3A-ED74172212FE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.ExceptionHandling", "modules\task-management\LINGYUN.Abp.BackgroundTasks.ExceptionHandling\LINGYUN.Abp.BackgroundTasks.ExceptionHandling.csproj", "{A383E007-340B-489F-88DA-D44BCC7E37FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{F94612B7-7F6F-4AEC-A895-6B524C1313AC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{416CC55B-C2CD-486D-9BE9-5F0843317240}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{D95BC108-BB30-4C88-A381-0AC5F7371184}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{C1134321-E1D5-477A-A580-AB3E5E833778}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{2F1541CB-8FA2-4AEF-9036-73B93FF8742C}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{93E7C9F3-68E9-4E4C-8810-4986AF7B2DC0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{1A4E882C-6651-4F9D-A432-6FA26E17673F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{2B1CE080-588B-4824-AA84-7DBBB3FFCB37}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.DistributedLocking", "modules\task-management\LINGYUN.Abp.BackgroundTasks.DistributedLocking\LINGYUN.Abp.BackgroundTasks.DistributedLocking.csproj", "{36BEE9C9-8D1A-43AE-880F-EAF646750099}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{0DAA2C37-FDEB-4E32-8514-E10432AC6DEF}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{7EE853B4-B795-4036-97F1-42674DE7CD7D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{32755A4F-2D52-44D0-88FB-3038007851EC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{10A795AB-710F-4FDF-8F84-0058CC22C08F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{96EE3984-0ABB-49B0-9779-DF3709C9B13F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{64643A14-D2F9-4E42-84B0-719C01017539}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{1A483DA8-A316-4D82-85CF-7AF2DE88FB68}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.EntityFrameworkCore", "modules\task-management\LINGYUN.Abp.TaskManagement.EntityFrameworkCore\LINGYUN.Abp.TaskManagement.EntityFrameworkCore.csproj", "{16ADDA63-31EA-4096-94B1-380E7B8260E3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{032F4262-20F5-4221-973E-3E0C732CD161}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{607E62C0-90E7-4CAA-876D-BC298193015E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{4EC3658B-5CA8-4156-A28B-69423777A030}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{98320D5C-1686-4616-8DDB-1A7B86848359}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Activities", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Activities\LINGYUN.Abp.BackgroundTasks.Activities.csproj", "{AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain.Shared", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain.Shared\LINGYUN.Abp.TaskManagement.Domain.Shared.csproj", "{E365E183-0843-44D4-A629-79E3AD0A6C18}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain\LINGYUN.Abp.TaskManagement.Domain.csproj", "{1907352F-C39E-435C-9EE3-277DD5B812CE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator", "framework\common\LINGYUN.Abp.IdGenerator\LINGYUN.Abp.IdGenerator.csproj", "{64D3A785-EA8D-4AAB-B3F8-715065DEAC43}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{5C1E48DE-6247-475B-BDB5-651521AC3A47}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{004CC7A9-92FF-4E98-8F1D-550D07CB47F0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{03B4B0AA-83CE-4E4B-9CE2-47369BF88B97}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{0DFDAC71-BCB9-44CF-A44A-E8288E75246F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Security", "framework\security\LINGYUN.Abp.Security\LINGYUN.Abp.Security.csproj", "{8F11DADB-557A-4ECF-BEBB-19AFA71998A1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{047F892F-F8D2-4952-A1E9-93AA2B030F76}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{23E99204-F7C1-47BA-84CD-3C9D05210F4F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{BE58649C-EA57-4DFC-8D25-54FDCB1943A1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "platform", "platform", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.Domain.Shared", "modules\platform\LINGYUN.Platform.Domain.Shared\LINGYUN.Platform.Domain.Shared.csproj", "{FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.Application.Contracts", "modules\platform\LINGYUN.Platform.Application.Contracts\LINGYUN.Platform.Application.Contracts.csproj", "{16C5E2EC-7A8F-2697-F611-0F2C22087192}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Platform.HttpApi.Client", "modules\platform\LINGYUN.Platform.HttpApi.Client\LINGYUN.Platform.HttpApi.Client.csproj", "{0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Sms.Platform", "modules\platform\LINGYUN.Abp.Sms.Platform\LINGYUN.Abp.Sms.Platform.csproj", "{8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Emailing.Platform", "modules\platform\LINGYUN.Abp.Emailing.Platform\LINGYUN.Abp.Emailing.Platform.csproj", "{8BAB6A91-865C-A599-BE2A-7C487129D83A}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "telemetry", "telemetry", "{CE07B9F4-54E8-4E74-BE14-8E5C1FB7AFC8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.MySqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.MySqlInstaller\LINGYUN.Abp.Quartz.MySqlInstaller.csproj", "{B6452D3F-E58C-C433-E52A-F65EE2657E01}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlServerInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlServerInstaller\LINGYUN.Abp.Quartz.SqlServerInstaller.csproj", "{D613F393-9CEE-2D3B-33C9-90630F8348E7}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlInstaller\LINGYUN.Abp.Quartz.SqlInstaller.csproj", "{0EEA73CA-D8DD-F044-045D-F070F8831E26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{164E4514-4E84-F13A-E24E-2A743753CDB3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {7DFE9385-2FFD-45CE-97B0-8FF4E967F19E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7DFE9385-2FFD-45CE-97B0-8FF4E967F19E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7DFE9385-2FFD-45CE-97B0-8FF4E967F19E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7DFE9385-2FFD-45CE-97B0-8FF4E967F19E}.Release|Any CPU.Build.0 = Release|Any CPU - {B3953343-4067-4F12-8F2C-900761934E89}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3953343-4067-4F12-8F2C-900761934E89}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3953343-4067-4F12-8F2C-900761934E89}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3953343-4067-4F12-8F2C-900761934E89}.Release|Any CPU.Build.0 = Release|Any CPU - {416F0E1F-3B52-421C-8E94-1DC9E4EE5949}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {416F0E1F-3B52-421C-8E94-1DC9E4EE5949}.Debug|Any CPU.Build.0 = Debug|Any CPU - {416F0E1F-3B52-421C-8E94-1DC9E4EE5949}.Release|Any CPU.ActiveCfg = Release|Any CPU - {416F0E1F-3B52-421C-8E94-1DC9E4EE5949}.Release|Any CPU.Build.0 = Release|Any CPU - {453C29F1-E52E-4DFE-A91A-5DE47611874D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {453C29F1-E52E-4DFE-A91A-5DE47611874D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {453C29F1-E52E-4DFE-A91A-5DE47611874D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {453C29F1-E52E-4DFE-A91A-5DE47611874D}.Release|Any CPU.Build.0 = Release|Any CPU - {3B356F97-5D0D-4306-A7C1-56696D581641}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3B356F97-5D0D-4306-A7C1-56696D581641}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3B356F97-5D0D-4306-A7C1-56696D581641}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3B356F97-5D0D-4306-A7C1-56696D581641}.Release|Any CPU.Build.0 = Release|Any CPU - {75ED12F9-3884-453E-8EDE-481949BF177A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {75ED12F9-3884-453E-8EDE-481949BF177A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {75ED12F9-3884-453E-8EDE-481949BF177A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {75ED12F9-3884-453E-8EDE-481949BF177A}.Release|Any CPU.Build.0 = Release|Any CPU - {0155C501-026B-4F58-A2BB-02518BBF1BB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0155C501-026B-4F58-A2BB-02518BBF1BB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0155C501-026B-4F58-A2BB-02518BBF1BB5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0155C501-026B-4F58-A2BB-02518BBF1BB5}.Release|Any CPU.Build.0 = Release|Any CPU - {7E5850A0-4CC8-4AB5-8988-067B9B1A00EA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E5850A0-4CC8-4AB5-8988-067B9B1A00EA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E5850A0-4CC8-4AB5-8988-067B9B1A00EA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E5850A0-4CC8-4AB5-8988-067B9B1A00EA}.Release|Any CPU.Build.0 = Release|Any CPU - {983F568C-3477-4B13-B3FC-95CE23BB2208}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {983F568C-3477-4B13-B3FC-95CE23BB2208}.Debug|Any CPU.Build.0 = Debug|Any CPU - {983F568C-3477-4B13-B3FC-95CE23BB2208}.Release|Any CPU.ActiveCfg = Release|Any CPU - {983F568C-3477-4B13-B3FC-95CE23BB2208}.Release|Any CPU.Build.0 = Release|Any CPU - {7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC}.Release|Any CPU.Build.0 = Release|Any CPU - {F4966BE6-CC96-4C23-9363-3BE4103F02E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F4966BE6-CC96-4C23-9363-3BE4103F02E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F4966BE6-CC96-4C23-9363-3BE4103F02E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F4966BE6-CC96-4C23-9363-3BE4103F02E8}.Release|Any CPU.Build.0 = Release|Any CPU - {93BB030A-EA01-4F08-BD41-0800D838162C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {93BB030A-EA01-4F08-BD41-0800D838162C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {93BB030A-EA01-4F08-BD41-0800D838162C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {93BB030A-EA01-4F08-BD41-0800D838162C}.Release|Any CPU.Build.0 = Release|Any CPU - {D7F2B64C-02F2-4097-80C1-DC41CE8FEE38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D7F2B64C-02F2-4097-80C1-DC41CE8FEE38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D7F2B64C-02F2-4097-80C1-DC41CE8FEE38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D7F2B64C-02F2-4097-80C1-DC41CE8FEE38}.Release|Any CPU.Build.0 = Release|Any CPU - {46C08EF3-4C81-411E-B5E4-AC3A5040DC67}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {46C08EF3-4C81-411E-B5E4-AC3A5040DC67}.Debug|Any CPU.Build.0 = Debug|Any CPU - {46C08EF3-4C81-411E-B5E4-AC3A5040DC67}.Release|Any CPU.ActiveCfg = Release|Any CPU - {46C08EF3-4C81-411E-B5E4-AC3A5040DC67}.Release|Any CPU.Build.0 = Release|Any CPU - {BBF1C93D-EF73-4B00-919F-5E7F360BDB03}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BBF1C93D-EF73-4B00-919F-5E7F360BDB03}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BBF1C93D-EF73-4B00-919F-5E7F360BDB03}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BBF1C93D-EF73-4B00-919F-5E7F360BDB03}.Release|Any CPU.Build.0 = Release|Any CPU - {3BC77471-D273-4C9C-8985-7FE450DA4686}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3BC77471-D273-4C9C-8985-7FE450DA4686}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3BC77471-D273-4C9C-8985-7FE450DA4686}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3BC77471-D273-4C9C-8985-7FE450DA4686}.Release|Any CPU.Build.0 = Release|Any CPU - {CC0BF1BE-A938-4BED-B5DD-AEA0235FF978}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC0BF1BE-A938-4BED-B5DD-AEA0235FF978}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC0BF1BE-A938-4BED-B5DD-AEA0235FF978}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC0BF1BE-A938-4BED-B5DD-AEA0235FF978}.Release|Any CPU.Build.0 = Release|Any CPU - {8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE}.Release|Any CPU.Build.0 = Release|Any CPU - {B01A8350-EFA3-4080-9CD6-0E991F99578E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B01A8350-EFA3-4080-9CD6-0E991F99578E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B01A8350-EFA3-4080-9CD6-0E991F99578E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B01A8350-EFA3-4080-9CD6-0E991F99578E}.Release|Any CPU.Build.0 = Release|Any CPU - {FCA0D08C-9F5B-4933-899B-EDF72E868691}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FCA0D08C-9F5B-4933-899B-EDF72E868691}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FCA0D08C-9F5B-4933-899B-EDF72E868691}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FCA0D08C-9F5B-4933-899B-EDF72E868691}.Release|Any CPU.Build.0 = Release|Any CPU - {FA12A8B4-255B-4619-B670-0F07C677C736}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FA12A8B4-255B-4619-B670-0F07C677C736}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FA12A8B4-255B-4619-B670-0F07C677C736}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FA12A8B4-255B-4619-B670-0F07C677C736}.Release|Any CPU.Build.0 = Release|Any CPU - {37053701-FD7D-4204-BF82-4FEDE0A28E60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37053701-FD7D-4204-BF82-4FEDE0A28E60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37053701-FD7D-4204-BF82-4FEDE0A28E60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37053701-FD7D-4204-BF82-4FEDE0A28E60}.Release|Any CPU.Build.0 = Release|Any CPU - {9AEE2B36-D7A7-4EA2-8A22-888E896012E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9AEE2B36-D7A7-4EA2-8A22-888E896012E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9AEE2B36-D7A7-4EA2-8A22-888E896012E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9AEE2B36-D7A7-4EA2-8A22-888E896012E8}.Release|Any CPU.Build.0 = Release|Any CPU - {FFE603F9-DB7E-45C8-9852-354363F9D799}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFE603F9-DB7E-45C8-9852-354363F9D799}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFE603F9-DB7E-45C8-9852-354363F9D799}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFE603F9-DB7E-45C8-9852-354363F9D799}.Release|Any CPU.Build.0 = Release|Any CPU - {AFB07F2B-4858-448D-8882-30A1142A0E7C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFB07F2B-4858-448D-8882-30A1142A0E7C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFB07F2B-4858-448D-8882-30A1142A0E7C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFB07F2B-4858-448D-8882-30A1142A0E7C}.Release|Any CPU.Build.0 = Release|Any CPU - {80804006-EED4-4CEA-88F8-A8F45EDFBF0D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80804006-EED4-4CEA-88F8-A8F45EDFBF0D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80804006-EED4-4CEA-88F8-A8F45EDFBF0D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80804006-EED4-4CEA-88F8-A8F45EDFBF0D}.Release|Any CPU.Build.0 = Release|Any CPU - {2C948A5C-0BA4-40EE-8EAF-851D81077E7E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C948A5C-0BA4-40EE-8EAF-851D81077E7E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C948A5C-0BA4-40EE-8EAF-851D81077E7E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C948A5C-0BA4-40EE-8EAF-851D81077E7E}.Release|Any CPU.Build.0 = Release|Any CPU - {56642E5F-B344-4C31-8501-ECDAADEA1C36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {56642E5F-B344-4C31-8501-ECDAADEA1C36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {56642E5F-B344-4C31-8501-ECDAADEA1C36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {56642E5F-B344-4C31-8501-ECDAADEA1C36}.Release|Any CPU.Build.0 = Release|Any CPU - {92CCFBCE-AF47-4F66-A900-FD29CDF284A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92CCFBCE-AF47-4F66-A900-FD29CDF284A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92CCFBCE-AF47-4F66-A900-FD29CDF284A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92CCFBCE-AF47-4F66-A900-FD29CDF284A2}.Release|Any CPU.Build.0 = Release|Any CPU - {59B6ABC7-8492-46F2-8139-2551E5796D2A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {59B6ABC7-8492-46F2-8139-2551E5796D2A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {59B6ABC7-8492-46F2-8139-2551E5796D2A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {59B6ABC7-8492-46F2-8139-2551E5796D2A}.Release|Any CPU.Build.0 = Release|Any CPU - {C5E82A68-9343-4BCB-AC3A-ED74172212FE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C5E82A68-9343-4BCB-AC3A-ED74172212FE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C5E82A68-9343-4BCB-AC3A-ED74172212FE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C5E82A68-9343-4BCB-AC3A-ED74172212FE}.Release|Any CPU.Build.0 = Release|Any CPU - {A383E007-340B-489F-88DA-D44BCC7E37FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A383E007-340B-489F-88DA-D44BCC7E37FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A383E007-340B-489F-88DA-D44BCC7E37FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A383E007-340B-489F-88DA-D44BCC7E37FA}.Release|Any CPU.Build.0 = Release|Any CPU - {F94612B7-7F6F-4AEC-A895-6B524C1313AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F94612B7-7F6F-4AEC-A895-6B524C1313AC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F94612B7-7F6F-4AEC-A895-6B524C1313AC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F94612B7-7F6F-4AEC-A895-6B524C1313AC}.Release|Any CPU.Build.0 = Release|Any CPU - {D95BC108-BB30-4C88-A381-0AC5F7371184}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D95BC108-BB30-4C88-A381-0AC5F7371184}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D95BC108-BB30-4C88-A381-0AC5F7371184}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D95BC108-BB30-4C88-A381-0AC5F7371184}.Release|Any CPU.Build.0 = Release|Any CPU - {2F1541CB-8FA2-4AEF-9036-73B93FF8742C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2F1541CB-8FA2-4AEF-9036-73B93FF8742C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2F1541CB-8FA2-4AEF-9036-73B93FF8742C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2F1541CB-8FA2-4AEF-9036-73B93FF8742C}.Release|Any CPU.Build.0 = Release|Any CPU - {1A4E882C-6651-4F9D-A432-6FA26E17673F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A4E882C-6651-4F9D-A432-6FA26E17673F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A4E882C-6651-4F9D-A432-6FA26E17673F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A4E882C-6651-4F9D-A432-6FA26E17673F}.Release|Any CPU.Build.0 = Release|Any CPU - {2B1CE080-588B-4824-AA84-7DBBB3FFCB37}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2B1CE080-588B-4824-AA84-7DBBB3FFCB37}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2B1CE080-588B-4824-AA84-7DBBB3FFCB37}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2B1CE080-588B-4824-AA84-7DBBB3FFCB37}.Release|Any CPU.Build.0 = Release|Any CPU - {36BEE9C9-8D1A-43AE-880F-EAF646750099}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {36BEE9C9-8D1A-43AE-880F-EAF646750099}.Debug|Any CPU.Build.0 = Debug|Any CPU - {36BEE9C9-8D1A-43AE-880F-EAF646750099}.Release|Any CPU.ActiveCfg = Release|Any CPU - {36BEE9C9-8D1A-43AE-880F-EAF646750099}.Release|Any CPU.Build.0 = Release|Any CPU - {0DAA2C37-FDEB-4E32-8514-E10432AC6DEF}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DAA2C37-FDEB-4E32-8514-E10432AC6DEF}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DAA2C37-FDEB-4E32-8514-E10432AC6DEF}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DAA2C37-FDEB-4E32-8514-E10432AC6DEF}.Release|Any CPU.Build.0 = Release|Any CPU - {7EE853B4-B795-4036-97F1-42674DE7CD7D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7EE853B4-B795-4036-97F1-42674DE7CD7D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7EE853B4-B795-4036-97F1-42674DE7CD7D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7EE853B4-B795-4036-97F1-42674DE7CD7D}.Release|Any CPU.Build.0 = Release|Any CPU - {10A795AB-710F-4FDF-8F84-0058CC22C08F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10A795AB-710F-4FDF-8F84-0058CC22C08F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10A795AB-710F-4FDF-8F84-0058CC22C08F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10A795AB-710F-4FDF-8F84-0058CC22C08F}.Release|Any CPU.Build.0 = Release|Any CPU - {96EE3984-0ABB-49B0-9779-DF3709C9B13F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96EE3984-0ABB-49B0-9779-DF3709C9B13F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96EE3984-0ABB-49B0-9779-DF3709C9B13F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96EE3984-0ABB-49B0-9779-DF3709C9B13F}.Release|Any CPU.Build.0 = Release|Any CPU - {1A483DA8-A316-4D82-85CF-7AF2DE88FB68}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1A483DA8-A316-4D82-85CF-7AF2DE88FB68}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1A483DA8-A316-4D82-85CF-7AF2DE88FB68}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1A483DA8-A316-4D82-85CF-7AF2DE88FB68}.Release|Any CPU.Build.0 = Release|Any CPU - {16ADDA63-31EA-4096-94B1-380E7B8260E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16ADDA63-31EA-4096-94B1-380E7B8260E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16ADDA63-31EA-4096-94B1-380E7B8260E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16ADDA63-31EA-4096-94B1-380E7B8260E3}.Release|Any CPU.Build.0 = Release|Any CPU - {032F4262-20F5-4221-973E-3E0C732CD161}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {032F4262-20F5-4221-973E-3E0C732CD161}.Debug|Any CPU.Build.0 = Debug|Any CPU - {032F4262-20F5-4221-973E-3E0C732CD161}.Release|Any CPU.ActiveCfg = Release|Any CPU - {032F4262-20F5-4221-973E-3E0C732CD161}.Release|Any CPU.Build.0 = Release|Any CPU - {607E62C0-90E7-4CAA-876D-BC298193015E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {607E62C0-90E7-4CAA-876D-BC298193015E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {607E62C0-90E7-4CAA-876D-BC298193015E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {607E62C0-90E7-4CAA-876D-BC298193015E}.Release|Any CPU.Build.0 = Release|Any CPU - {98320D5C-1686-4616-8DDB-1A7B86848359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {98320D5C-1686-4616-8DDB-1A7B86848359}.Debug|Any CPU.Build.0 = Debug|Any CPU - {98320D5C-1686-4616-8DDB-1A7B86848359}.Release|Any CPU.ActiveCfg = Release|Any CPU - {98320D5C-1686-4616-8DDB-1A7B86848359}.Release|Any CPU.Build.0 = Release|Any CPU - {AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2}.Release|Any CPU.Build.0 = Release|Any CPU - {E365E183-0843-44D4-A629-79E3AD0A6C18}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E365E183-0843-44D4-A629-79E3AD0A6C18}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E365E183-0843-44D4-A629-79E3AD0A6C18}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E365E183-0843-44D4-A629-79E3AD0A6C18}.Release|Any CPU.Build.0 = Release|Any CPU - {1907352F-C39E-435C-9EE3-277DD5B812CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1907352F-C39E-435C-9EE3-277DD5B812CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1907352F-C39E-435C-9EE3-277DD5B812CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1907352F-C39E-435C-9EE3-277DD5B812CE}.Release|Any CPU.Build.0 = Release|Any CPU - {64D3A785-EA8D-4AAB-B3F8-715065DEAC43}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {64D3A785-EA8D-4AAB-B3F8-715065DEAC43}.Debug|Any CPU.Build.0 = Debug|Any CPU - {64D3A785-EA8D-4AAB-B3F8-715065DEAC43}.Release|Any CPU.ActiveCfg = Release|Any CPU - {64D3A785-EA8D-4AAB-B3F8-715065DEAC43}.Release|Any CPU.Build.0 = Release|Any CPU - {5C1E48DE-6247-475B-BDB5-651521AC3A47}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5C1E48DE-6247-475B-BDB5-651521AC3A47}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5C1E48DE-6247-475B-BDB5-651521AC3A47}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5C1E48DE-6247-475B-BDB5-651521AC3A47}.Release|Any CPU.Build.0 = Release|Any CPU - {004CC7A9-92FF-4E98-8F1D-550D07CB47F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {004CC7A9-92FF-4E98-8F1D-550D07CB47F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {004CC7A9-92FF-4E98-8F1D-550D07CB47F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {004CC7A9-92FF-4E98-8F1D-550D07CB47F0}.Release|Any CPU.Build.0 = Release|Any CPU - {0DFDAC71-BCB9-44CF-A44A-E8288E75246F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DFDAC71-BCB9-44CF-A44A-E8288E75246F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DFDAC71-BCB9-44CF-A44A-E8288E75246F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DFDAC71-BCB9-44CF-A44A-E8288E75246F}.Release|Any CPU.Build.0 = Release|Any CPU - {8F11DADB-557A-4ECF-BEBB-19AFA71998A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8F11DADB-557A-4ECF-BEBB-19AFA71998A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8F11DADB-557A-4ECF-BEBB-19AFA71998A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8F11DADB-557A-4ECF-BEBB-19AFA71998A1}.Release|Any CPU.Build.0 = Release|Any CPU - {047F892F-F8D2-4952-A1E9-93AA2B030F76}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {047F892F-F8D2-4952-A1E9-93AA2B030F76}.Debug|Any CPU.Build.0 = Debug|Any CPU - {047F892F-F8D2-4952-A1E9-93AA2B030F76}.Release|Any CPU.ActiveCfg = Release|Any CPU - {047F892F-F8D2-4952-A1E9-93AA2B030F76}.Release|Any CPU.Build.0 = Release|Any CPU - {BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1}.Release|Any CPU.Build.0 = Release|Any CPU - {BE58649C-EA57-4DFC-8D25-54FDCB1943A1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BE58649C-EA57-4DFC-8D25-54FDCB1943A1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BE58649C-EA57-4DFC-8D25-54FDCB1943A1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BE58649C-EA57-4DFC-8D25-54FDCB1943A1}.Release|Any CPU.Build.0 = Release|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F}.Release|Any CPU.Build.0 = Release|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Debug|Any CPU.Build.0 = Debug|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Release|Any CPU.ActiveCfg = Release|Any CPU - {16C5E2EC-7A8F-2697-F611-0F2C22087192}.Release|Any CPU.Build.0 = Release|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B}.Release|Any CPU.Build.0 = Release|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0}.Release|Any CPU.Build.0 = Release|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BAB6A91-865C-A599-BE2A-7C487129D83A}.Release|Any CPU.Build.0 = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6452D3F-E58C-C433-E52A-F65EE2657E01}.Release|Any CPU.Build.0 = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D613F393-9CEE-2D3B-33C9-90630F8348E7}.Release|Any CPU.Build.0 = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.Build.0 = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {FB7A9794-06D2-42CF-939E-4626497B97BD} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {7DFE9385-2FFD-45CE-97B0-8FF4E967F19E} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {B3953343-4067-4F12-8F2C-900761934E89} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {416F0E1F-3B52-421C-8E94-1DC9E4EE5949} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {453C29F1-E52E-4DFE-A91A-5DE47611874D} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {3B356F97-5D0D-4306-A7C1-56696D581641} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {75ED12F9-3884-453E-8EDE-481949BF177A} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {0155C501-026B-4F58-A2BB-02518BBF1BB5} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {7E5850A0-4CC8-4AB5-8988-067B9B1A00EA} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {983F568C-3477-4B13-B3FC-95CE23BB2208} = {9BEC7A37-AECA-4096-B4B3-57A2172C1296} - {7C790142-61E7-4C7E-8E8B-3D5EBF71E8BC} = {8052BB2D-93A3-4C1D-9B4C-7080DCDF5B36} - {F4966BE6-CC96-4C23-9363-3BE4103F02E8} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {93BB030A-EA01-4F08-BD41-0800D838162C} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {D7F2B64C-02F2-4097-80C1-DC41CE8FEE38} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {46C08EF3-4C81-411E-B5E4-AC3A5040DC67} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {BBF1C93D-EF73-4B00-919F-5E7F360BDB03} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {3BC77471-D273-4C9C-8985-7FE450DA4686} = {2868332B-7D4F-4B43-8FC3-BA5CACC36C7E} - {CC0BF1BE-A938-4BED-B5DD-AEA0235FF978} = {2868332B-7D4F-4B43-8FC3-BA5CACC36C7E} - {8BFCE8C7-D41A-4D9C-9567-4155B7AC79FE} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {B01A8350-EFA3-4080-9CD6-0E991F99578E} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {4530BC52-D8D7-4022-B1E9-F327A0574835} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {E677C08C-DF2A-44DB-A2E2-E491734F3D5B} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {FCA0D08C-9F5B-4933-899B-EDF72E868691} = {E677C08C-DF2A-44DB-A2E2-E491734F3D5B} - {FA12A8B4-255B-4619-B670-0F07C677C736} = {E677C08C-DF2A-44DB-A2E2-E491734F3D5B} - {37053701-FD7D-4204-BF82-4FEDE0A28E60} = {E677C08C-DF2A-44DB-A2E2-E491734F3D5B} - {9AEE2B36-D7A7-4EA2-8A22-888E896012E8} = {4530BC52-D8D7-4022-B1E9-F327A0574835} - {FFE603F9-DB7E-45C8-9852-354363F9D799} = {4530BC52-D8D7-4022-B1E9-F327A0574835} - {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {AFB07F2B-4858-448D-8882-30A1142A0E7C} = {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} - {80804006-EED4-4CEA-88F8-A8F45EDFBF0D} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {2C948A5C-0BA4-40EE-8EAF-851D81077E7E} = {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} - {56642E5F-B344-4C31-8501-ECDAADEA1C36} = {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} - {92CCFBCE-AF47-4F66-A900-FD29CDF284A2} = {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} - {59B6ABC7-8492-46F2-8139-2551E5796D2A} = {E5060632-E9DF-44D4-BB82-B0C45A39BFF8} - {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {C5E82A68-9343-4BCB-AC3A-ED74172212FE} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {A383E007-340B-489F-88DA-D44BCC7E37FA} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {F94612B7-7F6F-4AEC-A895-6B524C1313AC} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {416CC55B-C2CD-486D-9BE9-5F0843317240} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {D95BC108-BB30-4C88-A381-0AC5F7371184} = {416CC55B-C2CD-486D-9BE9-5F0843317240} - {C1134321-E1D5-477A-A580-AB3E5E833778} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {2F1541CB-8FA2-4AEF-9036-73B93FF8742C} = {C1134321-E1D5-477A-A580-AB3E5E833778} - {93E7C9F3-68E9-4E4C-8810-4986AF7B2DC0} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {1A4E882C-6651-4F9D-A432-6FA26E17673F} = {93E7C9F3-68E9-4E4C-8810-4986AF7B2DC0} - {2B1CE080-588B-4824-AA84-7DBBB3FFCB37} = {4530BC52-D8D7-4022-B1E9-F327A0574835} - {36BEE9C9-8D1A-43AE-880F-EAF646750099} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {0DAA2C37-FDEB-4E32-8514-E10432AC6DEF} = {93E7C9F3-68E9-4E4C-8810-4986AF7B2DC0} - {7EE853B4-B795-4036-97F1-42674DE7CD7D} = {C1134321-E1D5-477A-A580-AB3E5E833778} - {32755A4F-2D52-44D0-88FB-3038007851EC} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {10A795AB-710F-4FDF-8F84-0058CC22C08F} = {32755A4F-2D52-44D0-88FB-3038007851EC} - {96EE3984-0ABB-49B0-9779-DF3709C9B13F} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {64643A14-D2F9-4E42-84B0-719C01017539} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {1A483DA8-A316-4D82-85CF-7AF2DE88FB68} = {64643A14-D2F9-4E42-84B0-719C01017539} - {16ADDA63-31EA-4096-94B1-380E7B8260E3} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {032F4262-20F5-4221-973E-3E0C732CD161} = {32755A4F-2D52-44D0-88FB-3038007851EC} - {607E62C0-90E7-4CAA-876D-BC298193015E} = {32755A4F-2D52-44D0-88FB-3038007851EC} - {4EC3658B-5CA8-4156-A28B-69423777A030} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {98320D5C-1686-4616-8DDB-1A7B86848359} = {4EC3658B-5CA8-4156-A28B-69423777A030} - {AFEF7FC1-31FD-4708-A7C2-B44E85A61BC2} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {E365E183-0843-44D4-A629-79E3AD0A6C18} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {1907352F-C39E-435C-9EE3-277DD5B812CE} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {64D3A785-EA8D-4AAB-B3F8-715065DEAC43} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {5C1E48DE-6247-475B-BDB5-651521AC3A47} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {004CC7A9-92FF-4E98-8F1D-550D07CB47F0} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {0DFDAC71-BCB9-44CF-A44A-E8288E75246F} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {8F11DADB-557A-4ECF-BEBB-19AFA71998A1} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {047F892F-F8D2-4952-A1E9-93AA2B030F76} = {FB7A9794-06D2-42CF-939E-4626497B97BD} - {23E99204-F7C1-47BA-84CD-3C9D05210F4F} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {BF298DF5-BC1D-4DDD-A51E-8E9020D2C5F1} = {23E99204-F7C1-47BA-84CD-3C9D05210F4F} - {BE58649C-EA57-4DFC-8D25-54FDCB1943A1} = {23E99204-F7C1-47BA-84CD-3C9D05210F4F} - {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {FDEF1FD1-574D-AF6E-5CBB-46FA0CE5633F} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {16C5E2EC-7A8F-2697-F611-0F2C22087192} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {0EA7605E-3364-6EDC-3AC1-F21A9A984B9B} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {8298C4A6-5275-D7A2-9A5C-99B5F2D0E7A0} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {8BAB6A91-865C-A599-BE2A-7C487129D83A} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE} = {CE07B9F4-54E8-4E74-BE14-8E5C1FB7AFC8} - {CE07B9F4-54E8-4E74-BE14-8E5C1FB7AFC8} = {03B4B0AA-83CE-4E4B-9CE2-47369BF88B97} - {B6452D3F-E58C-C433-E52A-F65EE2657E01} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {D613F393-9CEE-2D3B-33C9-90630F8348E7} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {0EEA73CA-D8DD-F044-045D-F070F8831E26} = {8C3DF571-BAC3-48C4-B46A-AC0E0EAA9871} - {164E4514-4E84-F13A-E24E-2A743753CDB3} = {CE07B9F4-54E8-4E74-BE14-8E5C1FB7AFC8} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {80ED12A5-C899-459F-A181-ADCC9D680DE5} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.WebhooksManagement.slnx b/aspnet-core/LINGYUN.MicroService.WebhooksManagement.slnx new file mode 100644 index 000000000..a9f854d53 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.WebhooksManagement.slnx @@ -0,0 +1,109 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.WechatManagement.sln b/aspnet-core/LINGYUN.MicroService.WechatManagement.sln deleted file mode 100644 index 52d42375d..000000000 --- a/aspnet-core/LINGYUN.MicroService.WechatManagement.sln +++ /dev/null @@ -1,423 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 18 -VisualStudioVersion = 18.0.11205.157 d18.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "framework", "framework", "{BD5616DF-D493-4170-8E78-46486BE77FC2}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "modules", "modules", "{EDB927C3-0589-4DAD-B5FE-5A4B5C727122}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "hosts", "hosts", "{1B7F2C6E-1712-4F22-989C-D56C7AEF7F16}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "wechat", "wechat", "{EDBB7BC1-46F0-4803-A572-7F8FEF433BE2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat", "framework\wechat\LINGYUN.Abp.WeChat\LINGYUN.Abp.WeChat.csproj", "{915E4DB5-8017-43C5-B547-08658F0ED488}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Common", "framework\wechat\LINGYUN.Abp.WeChat.Common\LINGYUN.Abp.WeChat.Common.csproj", "{3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.MiniProgram", "framework\wechat\LINGYUN.Abp.WeChat.MiniProgram\LINGYUN.Abp.WeChat.MiniProgram.csproj", "{08361B78-A90E-45BD-8517-B64208D7DAA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official", "framework\wechat\LINGYUN.Abp.WeChat.Official\LINGYUN.Abp.WeChat.Official.csproj", "{3F20CF07-12AE-49F4-84CE-F7BB99C519F8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application\LINGYUN.Abp.WeChat.Official.Application.csproj", "{DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Official.Application.Contracts\LINGYUN.Abp.WeChat.Official.Application.Contracts.csproj", "{6A652115-DED9-486E-BEA1-5F652C297359}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Official.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Official.HttpApi\LINGYUN.Abp.WeChat.Official.HttpApi.csproj", "{343E5900-511F-449B-95C1-7AC070395DB5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.SettingManagement", "framework\wechat\LINGYUN.Abp.WeChat.SettingManagement\LINGYUN.Abp.WeChat.SettingManagement.csproj", "{5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work", "framework\wechat\LINGYUN.Abp.WeChat.Work\LINGYUN.Abp.WeChat.Work.csproj", "{785D6536-DE97-40C5-AEE3-65C529AAE39F}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application\LINGYUN.Abp.WeChat.Work.Application.csproj", "{5E3BB07A-34C8-4C04-B5F5-A99F436F5934}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Application.Contracts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Application.Contracts\LINGYUN.Abp.WeChat.Work.Application.Contracts.csproj", "{8D781A51-9B85-4B8D-B6E2-00020B4D744B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.Common", "framework\wechat\LINGYUN.Abp.WeChat.Work.Common\LINGYUN.Abp.WeChat.Work.Common.csproj", "{12486482-960D-44B3-828A-F2FF304618D5}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.WeChat.Work.HttpApi", "framework\wechat\LINGYUN.Abp.WeChat.Work.HttpApi\LINGYUN.Abp.WeChat.Work.HttpApi.csproj", "{27A2DAE4-08EC-4121-ABF8-58F86E4AD747}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WechatManagement.HttpApi.Host", "services\LY.MicroService.WechatManagement.HttpApi.Host\LY.MicroService.WechatManagement.HttpApi.Host.csproj", "{23ADD956-A69D-494C-ABA0-1577DC46C72F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "auditing", "auditing", "{DC3710B9-2B39-4B03-A21E-20282E6AC053}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "authorization", "authorization", "{1A4D7CDD-9F77-40A0-A384-44DE0503FA2E}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "logging", "logging", "{D59249AA-A555-4AD0-A465-6835854628D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{7CAADF78-13ED-4832-B0F6-184EBAF4B162}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{0943AFDE-B14C-412B-8AE5-9BCBA5031698}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{F1B094CC-E6FB-41F4-AC05-0D34360480A7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{10A83D35-D37F-4D21-A79D-5E03B95EE400}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{EA746F97-941A-4D63-9EFB-230D78B965C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{8CB795F0-ED37-4D7B-BACA-DFAD667A865C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{83B3E21A-5D8B-45E1-8E61-A00D87663A11}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{87204045-FACA-44CF-ADF9-A716CF3B86B5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tenants", "tenants", "{F5AFCEF2-B0D5-4138-A576-BE8033D9613C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{48C72408-42E3-440B-B168-CE7F429872C2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{807A74FA-39D6-449D-8B1D-E8B10DF39447}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{045015A5-4693-45E2-9EAB-F8DCD175036B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "mvc", "mvc", "{FE68AF9E-D218-4601-A853-140D6AFEC314}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{BB666C40-149E-4C17-B4D0-B585CE6C3794}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Wrapper", "framework\common\LINGYUN.Abp.AspNetCore.Wrapper\LINGYUN.Abp.AspNetCore.Wrapper.csproj", "{1E1696BE-8227-4CCD-9D05-A4C583680C9C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{E5A995FD-2338-4D86-A269-FECB636583ED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{B89C5DC7-0570-4D3D-8317-6C57AA310953}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{EDEB8139-F69D-42B2-9399-7E8F87A16F6F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{73ED64BB-7C39-42EA-B821-3DD697B9C36A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization", "localization", "{52701ECE-3EBD-45EC-AD2C-0AAB15322311}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{1251068B-DD70-4946-AD3A-40183523B9A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{37454EB7-9CE9-4250-92E4-7316F16B5328}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{CC8DDC8C-CC0C-4534-8D9F-2C345E065869}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{80EBBECC-EF11-4E5E-91DA-EEECED832F21}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{164E4514-4E84-F13A-E24E-2A743753CDB3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Identity.WeChat.Work", "framework\wechat\LINGYUN.Abp.Identity.WeChat.Work\LINGYUN.Abp.Identity.WeChat.Work.csproj", "{CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.ExternalContact", "framework\wechat\LINGYUN.Abp.WeChat.Work.ExternalContact\LINGYUN.Abp.WeChat.Work.ExternalContact.csproj", "{3A6D0EA9-FA3F-4252-87D9-31845D57180D}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{02EA681E-C7D8-13C7-8484-4AC65E1B71E8}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{757279EC-708D-D1AD-5E9E-7B757F3F7785}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Tests", "tests\LINGYUN.Abp.WeChat.Work.Tests\LINGYUN.Abp.WeChat.Work.Tests.csproj", "{9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.ExternalContact.Tests", "tests\LINGYUN.Abp.WeChat.Work.ExternalContact.Tests\LINGYUN.Abp.WeChat.Work.ExternalContact.Tests.csproj", "{6628FB84-66C0-4023-9AA0-AAC4C0CC5917}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Handlers", "framework\wechat\LINGYUN.Abp.WeChat.Work.Handlers\LINGYUN.Abp.WeChat.Work.Handlers.csproj", "{E0DFCAD9-8AFE-A816-10F7-B4CA6691E910}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Contacts", "framework\wechat\LINGYUN.Abp.WeChat.Work.Contacts\LINGYUN.Abp.WeChat.Work.Contacts.csproj", "{69419D6B-9DA5-D9BD-1D6C-61BBAE331057}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.Contacts.Tests", "tests\LINGYUN.Abp.WeChat.Work.Contacts.Tests\LINGYUN.Abp.WeChat.Work.Contacts.Tests.csproj", "{C3BEBB5D-EF3A-4387-8357-0C3829756E41}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.OA", "framework\wechat\LINGYUN.Abp.WeChat.Work.OA\LINGYUN.Abp.WeChat.Work.OA.csproj", "{BA80572F-49BD-41E3-89D8-AE5BF15B00F9}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.WeChat.Work.OA.Tests", "tests\LINGYUN.Abp.WeChat.Work.OA.Tests\LINGYUN.Abp.WeChat.Work.OA.Tests.csproj", "{0209DBBA-CF63-4538-AB8D-452E9A591336}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {915E4DB5-8017-43C5-B547-08658F0ED488}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {915E4DB5-8017-43C5-B547-08658F0ED488}.Debug|Any CPU.Build.0 = Debug|Any CPU - {915E4DB5-8017-43C5-B547-08658F0ED488}.Release|Any CPU.ActiveCfg = Release|Any CPU - {915E4DB5-8017-43C5-B547-08658F0ED488}.Release|Any CPU.Build.0 = Release|Any CPU - {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3}.Release|Any CPU.Build.0 = Release|Any CPU - {08361B78-A90E-45BD-8517-B64208D7DAA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {08361B78-A90E-45BD-8517-B64208D7DAA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {08361B78-A90E-45BD-8517-B64208D7DAA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {08361B78-A90E-45BD-8517-B64208D7DAA0}.Release|Any CPU.Build.0 = Release|Any CPU - {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3F20CF07-12AE-49F4-84CE-F7BB99C519F8}.Release|Any CPU.Build.0 = Release|Any CPU - {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E}.Release|Any CPU.Build.0 = Release|Any CPU - {6A652115-DED9-486E-BEA1-5F652C297359}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6A652115-DED9-486E-BEA1-5F652C297359}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6A652115-DED9-486E-BEA1-5F652C297359}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6A652115-DED9-486E-BEA1-5F652C297359}.Release|Any CPU.Build.0 = Release|Any CPU - {343E5900-511F-449B-95C1-7AC070395DB5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {343E5900-511F-449B-95C1-7AC070395DB5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {343E5900-511F-449B-95C1-7AC070395DB5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {343E5900-511F-449B-95C1-7AC070395DB5}.Release|Any CPU.Build.0 = Release|Any CPU - {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42}.Release|Any CPU.Build.0 = Release|Any CPU - {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {785D6536-DE97-40C5-AEE3-65C529AAE39F}.Release|Any CPU.Build.0 = Release|Any CPU - {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Debug|Any CPU.Build.0 = Debug|Any CPU - {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Release|Any CPU.ActiveCfg = Release|Any CPU - {5E3BB07A-34C8-4C04-B5F5-A99F436F5934}.Release|Any CPU.Build.0 = Release|Any CPU - {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D781A51-9B85-4B8D-B6E2-00020B4D744B}.Release|Any CPU.Build.0 = Release|Any CPU - {12486482-960D-44B3-828A-F2FF304618D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {12486482-960D-44B3-828A-F2FF304618D5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {12486482-960D-44B3-828A-F2FF304618D5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {12486482-960D-44B3-828A-F2FF304618D5}.Release|Any CPU.Build.0 = Release|Any CPU - {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Debug|Any CPU.Build.0 = Debug|Any CPU - {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Release|Any CPU.ActiveCfg = Release|Any CPU - {27A2DAE4-08EC-4121-ABF8-58F86E4AD747}.Release|Any CPU.Build.0 = Release|Any CPU - {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {23ADD956-A69D-494C-ABA0-1577DC46C72F}.Release|Any CPU.Build.0 = Release|Any CPU - {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B}.Release|Any CPU.Build.0 = Release|Any CPU - {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CAADF78-13ED-4832-B0F6-184EBAF4B162}.Release|Any CPU.Build.0 = Release|Any CPU - {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0943AFDE-B14C-412B-8AE5-9BCBA5031698}.Release|Any CPU.Build.0 = Release|Any CPU - {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F1B094CC-E6FB-41F4-AC05-0D34360480A7}.Release|Any CPU.Build.0 = Release|Any CPU - {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0}.Release|Any CPU.Build.0 = Release|Any CPU - {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3}.Release|Any CPU.Build.0 = Release|Any CPU - {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Debug|Any CPU.Build.0 = Debug|Any CPU - {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Release|Any CPU.ActiveCfg = Release|Any CPU - {10A83D35-D37F-4D21-A79D-5E03B95EE400}.Release|Any CPU.Build.0 = Release|Any CPU - {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8CB795F0-ED37-4D7B-BACA-DFAD667A865C}.Release|Any CPU.Build.0 = Release|Any CPU - {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Debug|Any CPU.Build.0 = Debug|Any CPU - {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Release|Any CPU.ActiveCfg = Release|Any CPU - {83B3E21A-5D8B-45E1-8E61-A00D87663A11}.Release|Any CPU.Build.0 = Release|Any CPU - {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {87204045-FACA-44CF-ADF9-A716CF3B86B5}.Release|Any CPU.Build.0 = Release|Any CPU - {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781}.Release|Any CPU.Build.0 = Release|Any CPU - {48C72408-42E3-440B-B168-CE7F429872C2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {48C72408-42E3-440B-B168-CE7F429872C2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {48C72408-42E3-440B-B168-CE7F429872C2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {48C72408-42E3-440B-B168-CE7F429872C2}.Release|Any CPU.Build.0 = Release|Any CPU - {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Debug|Any CPU.Build.0 = Debug|Any CPU - {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Release|Any CPU.ActiveCfg = Release|Any CPU - {807A74FA-39D6-449D-8B1D-E8B10DF39447}.Release|Any CPU.Build.0 = Release|Any CPU - {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8}.Release|Any CPU.Build.0 = Release|Any CPU - {045015A5-4693-45E2-9EAB-F8DCD175036B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {045015A5-4693-45E2-9EAB-F8DCD175036B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {045015A5-4693-45E2-9EAB-F8DCD175036B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {045015A5-4693-45E2-9EAB-F8DCD175036B}.Release|Any CPU.Build.0 = Release|Any CPU - {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BB666C40-149E-4C17-B4D0-B585CE6C3794}.Release|Any CPU.Build.0 = Release|Any CPU - {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D}.Release|Any CPU.Build.0 = Release|Any CPU - {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E1696BE-8227-4CCD-9D05-A4C583680C9C}.Release|Any CPU.Build.0 = Release|Any CPU - {E5A995FD-2338-4D86-A269-FECB636583ED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E5A995FD-2338-4D86-A269-FECB636583ED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E5A995FD-2338-4D86-A269-FECB636583ED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E5A995FD-2338-4D86-A269-FECB636583ED}.Release|Any CPU.Build.0 = Release|Any CPU - {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B89C5DC7-0570-4D3D-8317-6C57AA310953}.Release|Any CPU.Build.0 = Release|Any CPU - {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EDEB8139-F69D-42B2-9399-7E8F87A16F6F}.Release|Any CPU.Build.0 = Release|Any CPU - {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0}.Release|Any CPU.Build.0 = Release|Any CPU - {1251068B-DD70-4946-AD3A-40183523B9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1251068B-DD70-4946-AD3A-40183523B9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1251068B-DD70-4946-AD3A-40183523B9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1251068B-DD70-4946-AD3A-40183523B9A2}.Release|Any CPU.Build.0 = Release|Any CPU - {37454EB7-9CE9-4250-92E4-7316F16B5328}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {37454EB7-9CE9-4250-92E4-7316F16B5328}.Debug|Any CPU.Build.0 = Debug|Any CPU - {37454EB7-9CE9-4250-92E4-7316F16B5328}.Release|Any CPU.ActiveCfg = Release|Any CPU - {37454EB7-9CE9-4250-92E4-7316F16B5328}.Release|Any CPU.Build.0 = Release|Any CPU - {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CC8DDC8C-CC0C-4534-8D9F-2C345E065869}.Release|Any CPU.Build.0 = Release|Any CPU - {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Debug|Any CPU.Build.0 = Debug|Any CPU - {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Release|Any CPU.ActiveCfg = Release|Any CPU - {80EBBECC-EF11-4E5E-91DA-EEECED832F21}.Release|Any CPU.Build.0 = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.Build.0 = Release|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5}.Release|Any CPU.Build.0 = Release|Any CPU - {3A6D0EA9-FA3F-4252-87D9-31845D57180D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3A6D0EA9-FA3F-4252-87D9-31845D57180D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3A6D0EA9-FA3F-4252-87D9-31845D57180D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3A6D0EA9-FA3F-4252-87D9-31845D57180D}.Release|Any CPU.Build.0 = Release|Any CPU - {757279EC-708D-D1AD-5E9E-7B757F3F7785}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {757279EC-708D-D1AD-5E9E-7B757F3F7785}.Debug|Any CPU.Build.0 = Debug|Any CPU - {757279EC-708D-D1AD-5E9E-7B757F3F7785}.Release|Any CPU.ActiveCfg = Release|Any CPU - {757279EC-708D-D1AD-5E9E-7B757F3F7785}.Release|Any CPU.Build.0 = Release|Any CPU - {9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39}.Release|Any CPU.Build.0 = Release|Any CPU - {6628FB84-66C0-4023-9AA0-AAC4C0CC5917}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6628FB84-66C0-4023-9AA0-AAC4C0CC5917}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6628FB84-66C0-4023-9AA0-AAC4C0CC5917}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6628FB84-66C0-4023-9AA0-AAC4C0CC5917}.Release|Any CPU.Build.0 = Release|Any CPU - {E0DFCAD9-8AFE-A816-10F7-B4CA6691E910}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E0DFCAD9-8AFE-A816-10F7-B4CA6691E910}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E0DFCAD9-8AFE-A816-10F7-B4CA6691E910}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E0DFCAD9-8AFE-A816-10F7-B4CA6691E910}.Release|Any CPU.Build.0 = Release|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Debug|Any CPU.Build.0 = Debug|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Release|Any CPU.ActiveCfg = Release|Any CPU - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057}.Release|Any CPU.Build.0 = Release|Any CPU - {C3BEBB5D-EF3A-4387-8357-0C3829756E41}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C3BEBB5D-EF3A-4387-8357-0C3829756E41}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C3BEBB5D-EF3A-4387-8357-0C3829756E41}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C3BEBB5D-EF3A-4387-8357-0C3829756E41}.Release|Any CPU.Build.0 = Release|Any CPU - {BA80572F-49BD-41E3-89D8-AE5BF15B00F9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {BA80572F-49BD-41E3-89D8-AE5BF15B00F9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {BA80572F-49BD-41E3-89D8-AE5BF15B00F9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {BA80572F-49BD-41E3-89D8-AE5BF15B00F9}.Release|Any CPU.Build.0 = Release|Any CPU - {0209DBBA-CF63-4538-AB8D-452E9A591336}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0209DBBA-CF63-4538-AB8D-452E9A591336}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0209DBBA-CF63-4538-AB8D-452E9A591336}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0209DBBA-CF63-4538-AB8D-452E9A591336}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {915E4DB5-8017-43C5-B547-08658F0ED488} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {3E91B702-7EAD-423D-BCFF-8EE9886AB8E3} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {08361B78-A90E-45BD-8517-B64208D7DAA0} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {3F20CF07-12AE-49F4-84CE-F7BB99C519F8} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {DC9E82AE-5AEC-4A9D-9D20-E0E6604A825E} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {6A652115-DED9-486E-BEA1-5F652C297359} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {343E5900-511F-449B-95C1-7AC070395DB5} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {5DA46CA5-C6F4-4C37-AB07-82A2C26DFC42} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {785D6536-DE97-40C5-AEE3-65C529AAE39F} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {5E3BB07A-34C8-4C04-B5F5-A99F436F5934} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {8D781A51-9B85-4B8D-B6E2-00020B4D744B} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {12486482-960D-44B3-828A-F2FF304618D5} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {27A2DAE4-08EC-4121-ABF8-58F86E4AD747} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {23ADD956-A69D-494C-ABA0-1577DC46C72F} = {1B7F2C6E-1712-4F22-989C-D56C7AEF7F16} - {DC3710B9-2B39-4B03-A21E-20282E6AC053} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {1A4D7CDD-9F77-40A0-A384-44DE0503FA2E} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {CF4286C8-DA7C-4B6F-A14A-F88D0C38225B} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {D59249AA-A555-4AD0-A465-6835854628D9} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {7CAADF78-13ED-4832-B0F6-184EBAF4B162} = {D59249AA-A555-4AD0-A465-6835854628D9} - {0943AFDE-B14C-412B-8AE5-9BCBA5031698} = {D59249AA-A555-4AD0-A465-6835854628D9} - {F1B094CC-E6FB-41F4-AC05-0D34360480A7} = {DC3710B9-2B39-4B03-A21E-20282E6AC053} - {DB23FEC1-3253-47D5-999B-A8EB12C0B7E0} = {DC3710B9-2B39-4B03-A21E-20282E6AC053} - {F3F2AF55-FCB1-4A93-A010-FD506FF25BF3} = {1A4D7CDD-9F77-40A0-A384-44DE0503FA2E} - {10A83D35-D37F-4D21-A79D-5E03B95EE400} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {EA746F97-941A-4D63-9EFB-230D78B965C2} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} - {8CB795F0-ED37-4D7B-BACA-DFAD667A865C} = {EA746F97-941A-4D63-9EFB-230D78B965C2} - {83B3E21A-5D8B-45E1-8E61-A00D87663A11} = {EA746F97-941A-4D63-9EFB-230D78B965C2} - {87204045-FACA-44CF-ADF9-A716CF3B86B5} = {EA746F97-941A-4D63-9EFB-230D78B965C2} - {F5AFCEF2-B0D5-4138-A576-BE8033D9613C} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {8BEC3BF6-F80A-4B58-AA9F-5B4DA8B1D781} = {F5AFCEF2-B0D5-4138-A576-BE8033D9613C} - {48C72408-42E3-440B-B168-CE7F429872C2} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {807A74FA-39D6-449D-8B1D-E8B10DF39447} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {FFE47B15-3FB8-4ADF-A7AD-96EC7DF4A7E8} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {045015A5-4693-45E2-9EAB-F8DCD175036B} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {FE68AF9E-D218-4601-A853-140D6AFEC314} = {BD5616DF-D493-4170-8E78-46486BE77FC2} - {BB666C40-149E-4C17-B4D0-B585CE6C3794} = {FE68AF9E-D218-4601-A853-140D6AFEC314} - {06FCEA82-C197-4392-80CE-2B5EEB9C4D6D} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {1E1696BE-8227-4CCD-9D05-A4C583680C9C} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {E5A995FD-2338-4D86-A269-FECB636583ED} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {B89C5DC7-0570-4D3D-8317-6C57AA310953} = {FE68AF9E-D218-4601-A853-140D6AFEC314} - {EDEB8139-F69D-42B2-9399-7E8F87A16F6F} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {73ED64BB-7C39-42EA-B821-3DD697B9C36A} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} - {8D21DEFE-2B3F-45F4-A440-B7C770EB16A0} = {73ED64BB-7C39-42EA-B821-3DD697B9C36A} - {52701ECE-3EBD-45EC-AD2C-0AAB15322311} = {EDB927C3-0589-4DAD-B5FE-5A4B5C727122} - {1251068B-DD70-4946-AD3A-40183523B9A2} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} - {37454EB7-9CE9-4250-92E4-7316F16B5328} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} - {CC8DDC8C-CC0C-4534-8D9F-2C345E065869} = {52701ECE-3EBD-45EC-AD2C-0AAB15322311} - {80EBBECC-EF11-4E5E-91DA-EEECED832F21} = {73ED64BB-7C39-42EA-B821-3DD697B9C36A} - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {164E4514-4E84-F13A-E24E-2A743753CDB3} = {FFACB4F0-33E0-4F8B-A97E-8FFFA10C12E6} - {CCC8A29C-1FC1-044F-895A-EC6894CDC8E5} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {3A6D0EA9-FA3F-4252-87D9-31845D57180D} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {757279EC-708D-D1AD-5E9E-7B757F3F7785} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {9DC2A982-8FA2-93BE-5FE1-3D7F7C105C39} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {6628FB84-66C0-4023-9AA0-AAC4C0CC5917} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {E0DFCAD9-8AFE-A816-10F7-B4CA6691E910} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {69419D6B-9DA5-D9BD-1D6C-61BBAE331057} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {C3BEBB5D-EF3A-4387-8357-0C3829756E41} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - {BA80572F-49BD-41E3-89D8-AE5BF15B00F9} = {EDBB7BC1-46F0-4803-A572-7F8FEF433BE2} - {0209DBBA-CF63-4538-AB8D-452E9A591336} = {02EA681E-C7D8-13C7-8484-4AC65E1B71E8} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {EC9D01C1-EA3C-48C7-A279-4D35C8AD312E} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.WechatManagement.slnx b/aspnet-core/LINGYUN.MicroService.WechatManagement.slnx new file mode 100644 index 000000000..5f5e866b1 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.WechatManagement.slnx @@ -0,0 +1,83 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/LINGYUN.MicroService.Workflow.sln b/aspnet-core/LINGYUN.MicroService.Workflow.sln deleted file mode 100644 index 1d2e9392f..000000000 --- a/aspnet-core/LINGYUN.MicroService.Workflow.sln +++ /dev/null @@ -1,616 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Version 17 -VisualStudioVersion = 17.0.31903.59 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "host", "host", "{6CB521FC-AC40-49A6-B9A5-91399CAA59AB}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LY.MicroService.WorkflowManagement.HttpApi.Host", "services\LY.MicroService.WorkflowManagement.HttpApi.Host\LY.MicroService.WorkflowManagement.HttpApi.Host.csproj", "{D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "elsa", "elsa", "{F1CCBEC7-ACAB-4DC5-909E-D8CC2E1B7EEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa", "modules\elsa\LINGYUN.Abp.Elsa\LINGYUN.Abp.Elsa.csproj", "{17EA5194-BBE8-4CE1-B6F9-DF6829622F38}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Server", "modules\elsa\LINGYUN.Abp.Elsa.Server\LINGYUN.Abp.Elsa.Server.csproj", "{88AA0D46-597E-4969-8382-A3F8054B9409}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore\LINGYUN.Abp.Elsa.EntityFrameworkCore.csproj", "{CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.BlobStoring", "modules\elsa\LINGYUN.Abp.Elsa.Activities.BlobStoring\LINGYUN.Abp.Elsa.Activities.BlobStoring.csproj", "{81CB5141-4FC5-413A-A516-CD65F40465C0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Notifications\LINGYUN.Abp.Elsa.Activities.Notifications.csproj", "{F5023AD3-D9C5-40C9-B76A-58D95E441997}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.IM", "modules\elsa\LINGYUN.Abp.Elsa.Activities.IM\LINGYUN.Abp.Elsa.Activities.IM.csproj", "{4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Sms", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Sms\LINGYUN.Abp.Elsa.Activities.Sms.csproj", "{FF3A193B-6131-4B4D-9729-1BF8A125C0AB}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "common", "common", "{6DA78E72-BA55-4ECF-97DB-6258174D3E2A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.RealTime", "framework\common\LINGYUN.Abp.RealTime\LINGYUN.Abp.RealTime.csproj", "{18A20311-84D8-49C4-B7BA-1187FF25E9BC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications", "modules\realtime-notifications\LINGYUN.Abp.Notifications\LINGYUN.Abp.Notifications.csproj", "{2C3FABD7-808B-47B5-A194-849A1738E9A2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IM", "modules\realtime-message\LINGYUN.Abp.IM\LINGYUN.Abp.IM.csproj", "{8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Emailing", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Emailing\LINGYUN.Abp.Elsa.Activities.Emailing.csproj", "{9E213E6F-77CB-4068-93EB-465C47FDA8FA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities", "modules\elsa\LINGYUN.Abp.Elsa.Activities\LINGYUN.Abp.Elsa.Activities.csproj", "{EEE9DF30-1901-4070-8E03-A8D8A0E10E34}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Core", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Core\LINGYUN.Abp.Notifications.Core.csproj", "{CE1B9AD0-7CDA-4459-86A3-A3162C1095D9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Webhooks", "modules\elsa\LINGYUN.Abp.Elsa.Activities.Webhooks\LINGYUN.Abp.Elsa.Activities.Webhooks.csproj", "{2CA34976-4A80-485C-8572-6004829BB727}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.Core", "modules\webhooks\LINGYUN.Abp.Webhooks.Core\LINGYUN.Abp.Webhooks.Core.csproj", "{44E4EBFA-6F25-4FD7-A4B3-536C3A42677C}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks", "modules\webhooks\LINGYUN.Abp.Webhooks\LINGYUN.Abp.Webhooks.csproj", "{6489B162-2B28-42B9-9AD4-EB5CCBB8AE85}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Webhooks.EventBus", "modules\webhooks\LINGYUN.Abp.Webhooks.EventBus\LINGYUN.Abp.Webhooks.EventBus.csproj", "{B6246B7A-4095-433A-B981-5D1E43CDF712}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql\LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj", "{4B20572A-10E7-4414-943A-974F275677B4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "tests", "tests", "{035B86BF-DD63-4A78-B8CE-29994860C948}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Tests", "tests\LINGYUN.Abp.Elsa.Tests\LINGYUN.Abp.Elsa.Tests.csproj", "{9F96F261-93F7-47C0-8F07-72CE39CE20A3}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TestsBase", "tests\LINGYUN.Abp.TestBase\LINGYUN.Abp.TestsBase.csproj", "{8395DA41-AF40-4B0D-B36D-FA8A56E75AED}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Activities.Webhooks.Tests", "tests\LINGYUN.Abp.Elsa.Activities.Webhooks.Tests\LINGYUN.Abp.Elsa.Activities.Webhooks.Tests.csproj", "{B3C2AFCC-EE59-4CB4-AB62-B90D60335632}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging", "framework\auditing\LINGYUN.Abp.AuditLogging\LINGYUN.Abp.AuditLogging.csproj", "{A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AuditLogging.Elasticsearch", "framework\auditing\LINGYUN.Abp.AuditLogging.Elasticsearch\LINGYUN.Abp.AuditLogging.Elasticsearch.csproj", "{00AB0A7E-578E-469C-B049-BCAA0233A9DD}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling", "framework\common\LINGYUN.Abp.ExceptionHandling\LINGYUN.Abp.ExceptionHandling.csproj", "{90B326F6-99DF-4EEC-A480-26C27EE22237}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Notifications", "modules\realtime-notifications\LINGYUN.Abp.ExceptionHandling.Notifications\LINGYUN.Abp.ExceptionHandling.Notifications.csproj", "{96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Notifications.Common", "modules\realtime-notifications\LINGYUN.Abp.Notifications.Common\LINGYUN.Abp.Notifications.Common.csproj", "{6399C2FB-B063-4BB3-B605-88CE5303198B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elsa.Notifications", "modules\elsa\LINGYUN.Abp.Elsa.Notifications\LINGYUN.Abp.Elsa.Notifications.csproj", "{D2F6105D-D667-46DB-8CDA-89B4D3F69067}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BlobStoring.OssManagement", "modules\oss-management\LINGYUN.Abp.BlobStoring.OssManagement\LINGYUN.Abp.BlobStoring.OssManagement.csproj", "{CE550720-FA77-4FF3-B5F0-A2B7A1781E61}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Elasticsearch", "framework\elasticsearch\LINGYUN.Abp.Elasticsearch\LINGYUN.Abp.Elasticsearch.csproj", "{ECA9D3FA-248F-4D0E-A612-FE1CC72241D5}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "oss-management", "oss-management", "{7B82C484-4DDF-45F2-B5FC-DFA9FFC3258B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Domain.Shared", "modules\oss-management\LINGYUN.Abp.OssManagement.Domain.Shared\LINGYUN.Abp.OssManagement.Domain.Shared.csproj", "{C2F7971A-CFCE-4BE0-9A3A-805972A5F00B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.Application.Contracts", "modules\oss-management\LINGYUN.Abp.OssManagement.Application.Contracts\LINGYUN.Abp.OssManagement.Application.Contracts.csproj", "{0DA0B251-66A6-441C-91B3-DFF953C53C4A}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.OssManagement.HttpApi.Client", "modules\oss-management\LINGYUN.Abp.OssManagement.HttpApi.Client\LINGYUN.Abp.OssManagement.HttpApi.Client.csproj", "{E71FE3BB-1793-460F-9802-77FB9BBC1356}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "realtime", "realtime", "{54C52918-0B8B-4036-B673-23BE74AFFA95}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "notifications", "notifications", "{927A4A04-56EF-4A0F-B17C-E80ABA78C554}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "message", "message", "{7AF97C49-F445-4D77-9DBF-1A211933A471}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.IdGenerator", "framework\common\LINGYUN.Abp.IdGenerator\LINGYUN.Abp.IdGenerator.csproj", "{9A5CDAEF-3767-4924-810E-C2018EFB5124}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "webhooks", "webhooks", "{7C1D7F97-1D2C-47F3-B3E7-8275D57267C4}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Authorization.OrganizationUnits", "framework\authorization\LINGYUN.Abp.Authorization.OrganizationUnits\LINGYUN.Abp.Authorization.OrganizationUnits.csproj", "{EE20EC4E-9C09-485A-8FBF-AF7FE253714D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.EventBus.CAP", "framework\common\LINGYUN.Abp.EventBus.CAP\LINGYUN.Abp.EventBus.CAP.csproj", "{B08298CE-D261-4990-8458-17341992AD01}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Data.DbMigrator", "framework\common\LINGYUN.Abp.Data.DbMigrator\LINGYUN.Abp.Data.DbMigrator.csproj", "{9D0D219B-AC06-4371-9BA1-630BC00FE0F0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.ExceptionHandling.Emailing", "framework\common\LINGYUN.Abp.ExceptionHandling.Emailing\LINGYUN.Abp.ExceptionHandling.Emailing.csproj", "{ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Wrapper", "framework\common\LINGYUN.Abp.Wrapper\LINGYUN.Abp.Wrapper.csproj", "{0B7492A2-7B11-4BC1-A55D-5756B74F0055}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Http.Client.Wrapper", "framework\common\LINGYUN.Abp.Http.Client.Wrapper\LINGYUN.Abp.Http.Client.Wrapper.csproj", "{92808D98-A096-4C4D-A038-A1D359812E32}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Localization.CultureMap", "framework\localization\LINGYUN.Abp.Localization.CultureMap\LINGYUN.Abp.Localization.CultureMap.csproj", "{D2019F8C-BD18-4DB5-9C38-1AF511D511FC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Localization", "framework\localization\LINGYUN.Abp.AspNetCore.Mvc.Localization\LINGYUN.Abp.AspNetCore.Mvc.Localization.csproj", "{57ED879F-2A6F-4618-AD0C-5896CAFA3902}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.Application", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.Application\LINGYUN.Abp.Serilog.Enrichers.Application.csproj", "{9A21CDDA-E03F-432B-A539-D553B69E1B5E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Serilog.Enrichers.UniqueId", "framework\logging\LINGYUN.Abp.Serilog.Enrichers.UniqueId\LINGYUN.Abp.Serilog.Enrichers.UniqueId.csproj", "{A3CC8323-B8C0-402E-B0CF-F67029E5E9E9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.Mvc.Wrapper", "framework\mvc\LINGYUN.Abp.AspNetCore.Mvc.Wrapper\LINGYUN.Abp.AspNetCore.Mvc.Wrapper.csproj", "{0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "localization-management", "localization-management", "{26C224A8-EA29-4FB9-BA1D-9FFA1D8608E7}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain.Shared", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain.Shared\LINGYUN.Abp.LocalizationManagement.Domain.Shared.csproj", "{E2327757-4988-4710-8A67-06A7EEC12DFA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.Domain", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.Domain\LINGYUN.Abp.LocalizationManagement.Domain.csproj", "{28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore", "modules\localization-management\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore\LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore.csproj", "{B281B9FE-8F1F-471C-B399-C1D07DF575E4}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "task-management", "task-management", "{7844FF58-7DBF-46E1-88B7-9764382A4EE9}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Abstractions", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Abstractions\LINGYUN.Abp.BackgroundTasks.Abstractions.csproj", "{927AD997-604B-4553-B768-8BFC595E9D62}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks", "modules\task-management\LINGYUN.Abp.BackgroundTasks\LINGYUN.Abp.BackgroundTasks.csproj", "{76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Activities", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Activities\LINGYUN.Abp.BackgroundTasks.Activities.csproj", "{F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.DistributedLocking", "modules\task-management\LINGYUN.Abp.BackgroundTasks.DistributedLocking\LINGYUN.Abp.BackgroundTasks.DistributedLocking.csproj", "{004C3502-A1E2-4CCC-AB8E-E823FCE3E916}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.ExceptionHandling", "modules\task-management\LINGYUN.Abp.BackgroundTasks.ExceptionHandling\LINGYUN.Abp.BackgroundTasks.ExceptionHandling.csproj", "{1E26260F-8D99-4F9D-B20F-4B4B12A315E1}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain.Shared", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain.Shared\LINGYUN.Abp.TaskManagement.Domain.Shared.csproj", "{A675EBDA-0021-406A-A0AA-5B27AF2902E0}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.Domain", "modules\task-management\LINGYUN.Abp.TaskManagement.Domain\LINGYUN.Abp.TaskManagement.Domain.csproj", "{7927F5D8-D950-45E5-B832-894A325445DC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TaskManagement.EntityFrameworkCore", "modules\task-management\LINGYUN.Abp.TaskManagement.EntityFrameworkCore\LINGYUN.Abp.TaskManagement.EntityFrameworkCore.csproj", "{749899E3-86F3-48FD-AF09-BBFDA8E0EA36}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.BackgroundTasks.Quartz", "modules\task-management\LINGYUN.Abp.BackgroundTasks.Quartz\LINGYUN.Abp.BackgroundTasks.Quartz.csproj", "{74500EF4-93FE-4B84-A538-BA94CEE73E92}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "text-templating", "text-templating", "{459DEA84-19F7-49A2-BD23-F5B871DFF92D}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain.Shared", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain.Shared\LINGYUN.Abp.TextTemplating.Domain.Shared.csproj", "{8420F159-401F-48F9-A206-CA5D5B0B4CDE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.Domain", "modules\text-templating\LINGYUN.Abp.TextTemplating.Domain\LINGYUN.Abp.TextTemplating.Domain.csproj", "{7E7E8768-198D-400A-B8C4-7E86BB38BE4E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.TextTemplating.EntityFrameworkCore", "modules\text-templating\LINGYUN.Abp.TextTemplating.EntityFrameworkCore\LINGYUN.Abp.TextTemplating.EntityFrameworkCore.csproj", "{86C48FB7-09D7-47F5-A6C0-FB7C22A362B2}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.MultiTenancy.Editions", "framework\tenants\LINGYUN.Abp.MultiTenancy.Editions\LINGYUN.Abp.MultiTenancy.Editions.csproj", "{3458DCC4-55CB-424A-A5BF-9DB11F24D41F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "saas", "saas", "{AD002164-CFB4-4583-BF13-62C815009ADE}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain.Shared", "modules\saas\LINGYUN.Abp.Saas.Domain.Shared\LINGYUN.Abp.Saas.Domain.Shared.csproj", "{A0869700-2CA0-40F1-8AEA-5ADEA1204294}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.Domain", "modules\saas\LINGYUN.Abp.Saas.Domain\LINGYUN.Abp.Saas.Domain.csproj", "{911B7C56-1908-42B5-BCE8-860DE650AE31}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Saas.EntityFrameworkCore", "modules\saas\LINGYUN.Abp.Saas.EntityFrameworkCore\LINGYUN.Abp.Saas.EntityFrameworkCore.csproj", "{CAE0492C-11A3-424C-8613-7DAB83E4FB60}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.AspNetCore.HttpOverrides", "framework\common\LINGYUN.Abp.AspNetCore.HttpOverrides\LINGYUN.Abp.AspNetCore.HttpOverrides.csproj", "{4D055853-DE80-4145-BB2F-33EB6B379F5E}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Security", "framework\security\LINGYUN.Abp.Security\LINGYUN.Abp.Security.csproj", "{E4783690-052A-4AB0-837E-BDBC77CC7EEC}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Claims.Mapping", "framework\security\LINGYUN.Abp.Claims.Mapping\LINGYUN.Abp.Claims.Mapping.csproj", "{1859E205-88DC-4E08-A0BD-55A045DCC495}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "identity", "identity", "{9C73D4E6-4408-4717-B51C-63C20321D4DA}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session", "modules\identity\LINGYUN.Abp.Identity.Session\LINGYUN.Abp.Identity.Session.csproj", "{6ECF678D-6F3A-4084-8538-A86C1D67C703}" -EndProject -Project("{9A19103F-16F7-4668-BE54-9A1E7A4F7556}") = "LINGYUN.Abp.Identity.Session.AspNetCore", "modules\identity\LINGYUN.Abp.Identity.Session.AspNetCore\LINGYUN.Abp.Identity.Session.AspNetCore.csproj", "{9FB5E943-7F6F-4281-9C00-E76284B4F1F3}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql\LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql.csproj", "{D56851BB-557E-4CF9-B724-8E607EEE9D07}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer", "modules\elsa\LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer\LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer.csproj", "{22BB3760-8DA1-4714-ADB7-1585A4EB8496}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2.x", "2.x", "{618DAF98-06CE-48BB-8A48-60C92C55F9FC}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3.x", "3.x", "{52E78BD0-DB63-4C5A-A88E-9AD3EFB2E618}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ElsaNext", "modules\elsa\LINGYUN.Abp.ElsaNext\LINGYUN.Abp.ElsaNext.csproj", "{90D14180-20AC-44E6-BC7B-D9DA0868C5E1}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.ElsaNext.Server", "modules\elsa\LINGYUN.Abp.ElsaNext.Server\LINGYUN.Abp.ElsaNext.Server.csproj", "{F6A800FC-3DE0-410E-9096-92404F11E2D1}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "2.x", "2.x", "{55400168-8E20-4D10-A3F0-FC591271E71F}" -EndProject -Project("{2150E333-8FDC-42A3-9474-1A3956D46DE8}") = "3.x", "3.x", "{9CD04B74-AA10-4253-BEEC-4837D48AD3EB}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LY.MicroService.WorkflowManagement.Next.HttpApi.Host", "services\LY.MicroService.WorkflowManagement.Next.HttpApi.Host\LY.MicroService.WorkflowManagement.Next.HttpApi.Host.csproj", "{09CDA563-DE16-41F6-B61C-56102E7D9B2E}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.SkyWalking", "framework\telemetry\LINGYUN.Abp.Telemetry.SkyWalking\LINGYUN.Abp.Telemetry.SkyWalking.csproj", "{7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.MySqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.MySqlInstaller\LINGYUN.Abp.Quartz.MySqlInstaller.csproj", "{B5C96536-6387-44F4-A2E2-D4D683588AF5}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlServerInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlServerInstaller\LINGYUN.Abp.Quartz.SqlServerInstaller.csproj", "{52F5A9DE-50B8-42C6-9980-E908DC6A4B52}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Quartz.SqlInstaller", "modules\task-management\LINGYUN.Abp.Quartz.SqlInstaller\LINGYUN.Abp.Quartz.SqlInstaller.csproj", "{0EEA73CA-D8DD-F044-045D-F070F8831E26}" -EndProject -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "LINGYUN.Abp.Telemetry.OpenTelemetry", "framework\telemetry\LINGYUN.Abp.Telemetry.OpenTelemetry\LINGYUN.Abp.Telemetry.OpenTelemetry.csproj", "{164E4514-4E84-F13A-E24E-2A743753CDB3}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B}.Release|Any CPU.Build.0 = Release|Any CPU - {17EA5194-BBE8-4CE1-B6F9-DF6829622F38}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {17EA5194-BBE8-4CE1-B6F9-DF6829622F38}.Debug|Any CPU.Build.0 = Debug|Any CPU - {17EA5194-BBE8-4CE1-B6F9-DF6829622F38}.Release|Any CPU.ActiveCfg = Release|Any CPU - {17EA5194-BBE8-4CE1-B6F9-DF6829622F38}.Release|Any CPU.Build.0 = Release|Any CPU - {88AA0D46-597E-4969-8382-A3F8054B9409}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {88AA0D46-597E-4969-8382-A3F8054B9409}.Debug|Any CPU.Build.0 = Debug|Any CPU - {88AA0D46-597E-4969-8382-A3F8054B9409}.Release|Any CPU.ActiveCfg = Release|Any CPU - {88AA0D46-597E-4969-8382-A3F8054B9409}.Release|Any CPU.Build.0 = Release|Any CPU - {CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288}.Release|Any CPU.Build.0 = Release|Any CPU - {81CB5141-4FC5-413A-A516-CD65F40465C0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {81CB5141-4FC5-413A-A516-CD65F40465C0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {81CB5141-4FC5-413A-A516-CD65F40465C0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {81CB5141-4FC5-413A-A516-CD65F40465C0}.Release|Any CPU.Build.0 = Release|Any CPU - {F5023AD3-D9C5-40C9-B76A-58D95E441997}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F5023AD3-D9C5-40C9-B76A-58D95E441997}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F5023AD3-D9C5-40C9-B76A-58D95E441997}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F5023AD3-D9C5-40C9-B76A-58D95E441997}.Release|Any CPU.Build.0 = Release|Any CPU - {4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C}.Release|Any CPU.Build.0 = Release|Any CPU - {FF3A193B-6131-4B4D-9729-1BF8A125C0AB}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {FF3A193B-6131-4B4D-9729-1BF8A125C0AB}.Debug|Any CPU.Build.0 = Debug|Any CPU - {FF3A193B-6131-4B4D-9729-1BF8A125C0AB}.Release|Any CPU.ActiveCfg = Release|Any CPU - {FF3A193B-6131-4B4D-9729-1BF8A125C0AB}.Release|Any CPU.Build.0 = Release|Any CPU - {18A20311-84D8-49C4-B7BA-1187FF25E9BC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {18A20311-84D8-49C4-B7BA-1187FF25E9BC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {18A20311-84D8-49C4-B7BA-1187FF25E9BC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {18A20311-84D8-49C4-B7BA-1187FF25E9BC}.Release|Any CPU.Build.0 = Release|Any CPU - {2C3FABD7-808B-47B5-A194-849A1738E9A2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2C3FABD7-808B-47B5-A194-849A1738E9A2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2C3FABD7-808B-47B5-A194-849A1738E9A2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2C3FABD7-808B-47B5-A194-849A1738E9A2}.Release|Any CPU.Build.0 = Release|Any CPU - {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126}.Release|Any CPU.Build.0 = Release|Any CPU - {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9E213E6F-77CB-4068-93EB-465C47FDA8FA}.Release|Any CPU.Build.0 = Release|Any CPU - {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EEE9DF30-1901-4070-8E03-A8D8A0E10E34}.Release|Any CPU.Build.0 = Release|Any CPU - {CE1B9AD0-7CDA-4459-86A3-A3162C1095D9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE1B9AD0-7CDA-4459-86A3-A3162C1095D9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE1B9AD0-7CDA-4459-86A3-A3162C1095D9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE1B9AD0-7CDA-4459-86A3-A3162C1095D9}.Release|Any CPU.Build.0 = Release|Any CPU - {2CA34976-4A80-485C-8572-6004829BB727}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {2CA34976-4A80-485C-8572-6004829BB727}.Debug|Any CPU.Build.0 = Debug|Any CPU - {2CA34976-4A80-485C-8572-6004829BB727}.Release|Any CPU.ActiveCfg = Release|Any CPU - {2CA34976-4A80-485C-8572-6004829BB727}.Release|Any CPU.Build.0 = Release|Any CPU - {44E4EBFA-6F25-4FD7-A4B3-536C3A42677C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {44E4EBFA-6F25-4FD7-A4B3-536C3A42677C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {44E4EBFA-6F25-4FD7-A4B3-536C3A42677C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {44E4EBFA-6F25-4FD7-A4B3-536C3A42677C}.Release|Any CPU.Build.0 = Release|Any CPU - {6489B162-2B28-42B9-9AD4-EB5CCBB8AE85}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6489B162-2B28-42B9-9AD4-EB5CCBB8AE85}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6489B162-2B28-42B9-9AD4-EB5CCBB8AE85}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6489B162-2B28-42B9-9AD4-EB5CCBB8AE85}.Release|Any CPU.Build.0 = Release|Any CPU - {B6246B7A-4095-433A-B981-5D1E43CDF712}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B6246B7A-4095-433A-B981-5D1E43CDF712}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B6246B7A-4095-433A-B981-5D1E43CDF712}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B6246B7A-4095-433A-B981-5D1E43CDF712}.Release|Any CPU.Build.0 = Release|Any CPU - {4B20572A-10E7-4414-943A-974F275677B4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4B20572A-10E7-4414-943A-974F275677B4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4B20572A-10E7-4414-943A-974F275677B4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4B20572A-10E7-4414-943A-974F275677B4}.Release|Any CPU.Build.0 = Release|Any CPU - {9F96F261-93F7-47C0-8F07-72CE39CE20A3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9F96F261-93F7-47C0-8F07-72CE39CE20A3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9F96F261-93F7-47C0-8F07-72CE39CE20A3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9F96F261-93F7-47C0-8F07-72CE39CE20A3}.Release|Any CPU.Build.0 = Release|Any CPU - {8395DA41-AF40-4B0D-B36D-FA8A56E75AED}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8395DA41-AF40-4B0D-B36D-FA8A56E75AED}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8395DA41-AF40-4B0D-B36D-FA8A56E75AED}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8395DA41-AF40-4B0D-B36D-FA8A56E75AED}.Release|Any CPU.Build.0 = Release|Any CPU - {B3C2AFCC-EE59-4CB4-AB62-B90D60335632}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B3C2AFCC-EE59-4CB4-AB62-B90D60335632}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B3C2AFCC-EE59-4CB4-AB62-B90D60335632}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B3C2AFCC-EE59-4CB4-AB62-B90D60335632}.Release|Any CPU.Build.0 = Release|Any CPU - {A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72}.Release|Any CPU.Build.0 = Release|Any CPU - {00AB0A7E-578E-469C-B049-BCAA0233A9DD}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {00AB0A7E-578E-469C-B049-BCAA0233A9DD}.Debug|Any CPU.Build.0 = Debug|Any CPU - {00AB0A7E-578E-469C-B049-BCAA0233A9DD}.Release|Any CPU.ActiveCfg = Release|Any CPU - {00AB0A7E-578E-469C-B049-BCAA0233A9DD}.Release|Any CPU.Build.0 = Release|Any CPU - {90B326F6-99DF-4EEC-A480-26C27EE22237}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90B326F6-99DF-4EEC-A480-26C27EE22237}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90B326F6-99DF-4EEC-A480-26C27EE22237}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90B326F6-99DF-4EEC-A480-26C27EE22237}.Release|Any CPU.Build.0 = Release|Any CPU - {96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0}.Release|Any CPU.Build.0 = Release|Any CPU - {6399C2FB-B063-4BB3-B605-88CE5303198B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6399C2FB-B063-4BB3-B605-88CE5303198B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6399C2FB-B063-4BB3-B605-88CE5303198B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6399C2FB-B063-4BB3-B605-88CE5303198B}.Release|Any CPU.Build.0 = Release|Any CPU - {D2F6105D-D667-46DB-8CDA-89B4D3F69067}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2F6105D-D667-46DB-8CDA-89B4D3F69067}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2F6105D-D667-46DB-8CDA-89B4D3F69067}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2F6105D-D667-46DB-8CDA-89B4D3F69067}.Release|Any CPU.Build.0 = Release|Any CPU - {CE550720-FA77-4FF3-B5F0-A2B7A1781E61}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CE550720-FA77-4FF3-B5F0-A2B7A1781E61}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CE550720-FA77-4FF3-B5F0-A2B7A1781E61}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CE550720-FA77-4FF3-B5F0-A2B7A1781E61}.Release|Any CPU.Build.0 = Release|Any CPU - {ECA9D3FA-248F-4D0E-A612-FE1CC72241D5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ECA9D3FA-248F-4D0E-A612-FE1CC72241D5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ECA9D3FA-248F-4D0E-A612-FE1CC72241D5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ECA9D3FA-248F-4D0E-A612-FE1CC72241D5}.Release|Any CPU.Build.0 = Release|Any CPU - {C2F7971A-CFCE-4BE0-9A3A-805972A5F00B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {C2F7971A-CFCE-4BE0-9A3A-805972A5F00B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {C2F7971A-CFCE-4BE0-9A3A-805972A5F00B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {C2F7971A-CFCE-4BE0-9A3A-805972A5F00B}.Release|Any CPU.Build.0 = Release|Any CPU - {0DA0B251-66A6-441C-91B3-DFF953C53C4A}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DA0B251-66A6-441C-91B3-DFF953C53C4A}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DA0B251-66A6-441C-91B3-DFF953C53C4A}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DA0B251-66A6-441C-91B3-DFF953C53C4A}.Release|Any CPU.Build.0 = Release|Any CPU - {E71FE3BB-1793-460F-9802-77FB9BBC1356}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E71FE3BB-1793-460F-9802-77FB9BBC1356}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E71FE3BB-1793-460F-9802-77FB9BBC1356}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E71FE3BB-1793-460F-9802-77FB9BBC1356}.Release|Any CPU.Build.0 = Release|Any CPU - {9A5CDAEF-3767-4924-810E-C2018EFB5124}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A5CDAEF-3767-4924-810E-C2018EFB5124}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A5CDAEF-3767-4924-810E-C2018EFB5124}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A5CDAEF-3767-4924-810E-C2018EFB5124}.Release|Any CPU.Build.0 = Release|Any CPU - {EE20EC4E-9C09-485A-8FBF-AF7FE253714D}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {EE20EC4E-9C09-485A-8FBF-AF7FE253714D}.Debug|Any CPU.Build.0 = Debug|Any CPU - {EE20EC4E-9C09-485A-8FBF-AF7FE253714D}.Release|Any CPU.ActiveCfg = Release|Any CPU - {EE20EC4E-9C09-485A-8FBF-AF7FE253714D}.Release|Any CPU.Build.0 = Release|Any CPU - {B08298CE-D261-4990-8458-17341992AD01}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B08298CE-D261-4990-8458-17341992AD01}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B08298CE-D261-4990-8458-17341992AD01}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B08298CE-D261-4990-8458-17341992AD01}.Release|Any CPU.Build.0 = Release|Any CPU - {9D0D219B-AC06-4371-9BA1-630BC00FE0F0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9D0D219B-AC06-4371-9BA1-630BC00FE0F0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9D0D219B-AC06-4371-9BA1-630BC00FE0F0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9D0D219B-AC06-4371-9BA1-630BC00FE0F0}.Release|Any CPU.Build.0 = Release|Any CPU - {ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B}.Debug|Any CPU.Build.0 = Debug|Any CPU - {ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B}.Release|Any CPU.ActiveCfg = Release|Any CPU - {ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B}.Release|Any CPU.Build.0 = Release|Any CPU - {0B7492A2-7B11-4BC1-A55D-5756B74F0055}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0B7492A2-7B11-4BC1-A55D-5756B74F0055}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0B7492A2-7B11-4BC1-A55D-5756B74F0055}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0B7492A2-7B11-4BC1-A55D-5756B74F0055}.Release|Any CPU.Build.0 = Release|Any CPU - {92808D98-A096-4C4D-A038-A1D359812E32}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {92808D98-A096-4C4D-A038-A1D359812E32}.Debug|Any CPU.Build.0 = Debug|Any CPU - {92808D98-A096-4C4D-A038-A1D359812E32}.Release|Any CPU.ActiveCfg = Release|Any CPU - {92808D98-A096-4C4D-A038-A1D359812E32}.Release|Any CPU.Build.0 = Release|Any CPU - {D2019F8C-BD18-4DB5-9C38-1AF511D511FC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D2019F8C-BD18-4DB5-9C38-1AF511D511FC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D2019F8C-BD18-4DB5-9C38-1AF511D511FC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D2019F8C-BD18-4DB5-9C38-1AF511D511FC}.Release|Any CPU.Build.0 = Release|Any CPU - {57ED879F-2A6F-4618-AD0C-5896CAFA3902}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {57ED879F-2A6F-4618-AD0C-5896CAFA3902}.Debug|Any CPU.Build.0 = Debug|Any CPU - {57ED879F-2A6F-4618-AD0C-5896CAFA3902}.Release|Any CPU.ActiveCfg = Release|Any CPU - {57ED879F-2A6F-4618-AD0C-5896CAFA3902}.Release|Any CPU.Build.0 = Release|Any CPU - {9A21CDDA-E03F-432B-A539-D553B69E1B5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9A21CDDA-E03F-432B-A539-D553B69E1B5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9A21CDDA-E03F-432B-A539-D553B69E1B5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9A21CDDA-E03F-432B-A539-D553B69E1B5E}.Release|Any CPU.Build.0 = Release|Any CPU - {A3CC8323-B8C0-402E-B0CF-F67029E5E9E9}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A3CC8323-B8C0-402E-B0CF-F67029E5E9E9}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A3CC8323-B8C0-402E-B0CF-F67029E5E9E9}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A3CC8323-B8C0-402E-B0CF-F67029E5E9E9}.Release|Any CPU.Build.0 = Release|Any CPU - {0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72}.Release|Any CPU.Build.0 = Release|Any CPU - {E2327757-4988-4710-8A67-06A7EEC12DFA}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E2327757-4988-4710-8A67-06A7EEC12DFA}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E2327757-4988-4710-8A67-06A7EEC12DFA}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E2327757-4988-4710-8A67-06A7EEC12DFA}.Release|Any CPU.Build.0 = Release|Any CPU - {28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386}.Debug|Any CPU.Build.0 = Debug|Any CPU - {28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386}.Release|Any CPU.ActiveCfg = Release|Any CPU - {28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386}.Release|Any CPU.Build.0 = Release|Any CPU - {B281B9FE-8F1F-471C-B399-C1D07DF575E4}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B281B9FE-8F1F-471C-B399-C1D07DF575E4}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B281B9FE-8F1F-471C-B399-C1D07DF575E4}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B281B9FE-8F1F-471C-B399-C1D07DF575E4}.Release|Any CPU.Build.0 = Release|Any CPU - {927AD997-604B-4553-B768-8BFC595E9D62}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {927AD997-604B-4553-B768-8BFC595E9D62}.Debug|Any CPU.Build.0 = Debug|Any CPU - {927AD997-604B-4553-B768-8BFC595E9D62}.Release|Any CPU.ActiveCfg = Release|Any CPU - {927AD997-604B-4553-B768-8BFC595E9D62}.Release|Any CPU.Build.0 = Release|Any CPU - {76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07}.Release|Any CPU.Build.0 = Release|Any CPU - {F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0}.Release|Any CPU.Build.0 = Release|Any CPU - {004C3502-A1E2-4CCC-AB8E-E823FCE3E916}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {004C3502-A1E2-4CCC-AB8E-E823FCE3E916}.Debug|Any CPU.Build.0 = Debug|Any CPU - {004C3502-A1E2-4CCC-AB8E-E823FCE3E916}.Release|Any CPU.ActiveCfg = Release|Any CPU - {004C3502-A1E2-4CCC-AB8E-E823FCE3E916}.Release|Any CPU.Build.0 = Release|Any CPU - {1E26260F-8D99-4F9D-B20F-4B4B12A315E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1E26260F-8D99-4F9D-B20F-4B4B12A315E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1E26260F-8D99-4F9D-B20F-4B4B12A315E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1E26260F-8D99-4F9D-B20F-4B4B12A315E1}.Release|Any CPU.Build.0 = Release|Any CPU - {A675EBDA-0021-406A-A0AA-5B27AF2902E0}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A675EBDA-0021-406A-A0AA-5B27AF2902E0}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A675EBDA-0021-406A-A0AA-5B27AF2902E0}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A675EBDA-0021-406A-A0AA-5B27AF2902E0}.Release|Any CPU.Build.0 = Release|Any CPU - {7927F5D8-D950-45E5-B832-894A325445DC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7927F5D8-D950-45E5-B832-894A325445DC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7927F5D8-D950-45E5-B832-894A325445DC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7927F5D8-D950-45E5-B832-894A325445DC}.Release|Any CPU.Build.0 = Release|Any CPU - {749899E3-86F3-48FD-AF09-BBFDA8E0EA36}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {749899E3-86F3-48FD-AF09-BBFDA8E0EA36}.Debug|Any CPU.Build.0 = Debug|Any CPU - {749899E3-86F3-48FD-AF09-BBFDA8E0EA36}.Release|Any CPU.ActiveCfg = Release|Any CPU - {749899E3-86F3-48FD-AF09-BBFDA8E0EA36}.Release|Any CPU.Build.0 = Release|Any CPU - {74500EF4-93FE-4B84-A538-BA94CEE73E92}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {74500EF4-93FE-4B84-A538-BA94CEE73E92}.Debug|Any CPU.Build.0 = Debug|Any CPU - {74500EF4-93FE-4B84-A538-BA94CEE73E92}.Release|Any CPU.ActiveCfg = Release|Any CPU - {74500EF4-93FE-4B84-A538-BA94CEE73E92}.Release|Any CPU.Build.0 = Release|Any CPU - {8420F159-401F-48F9-A206-CA5D5B0B4CDE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {8420F159-401F-48F9-A206-CA5D5B0B4CDE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {8420F159-401F-48F9-A206-CA5D5B0B4CDE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {8420F159-401F-48F9-A206-CA5D5B0B4CDE}.Release|Any CPU.Build.0 = Release|Any CPU - {7E7E8768-198D-400A-B8C4-7E86BB38BE4E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7E7E8768-198D-400A-B8C4-7E86BB38BE4E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7E7E8768-198D-400A-B8C4-7E86BB38BE4E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7E7E8768-198D-400A-B8C4-7E86BB38BE4E}.Release|Any CPU.Build.0 = Release|Any CPU - {86C48FB7-09D7-47F5-A6C0-FB7C22A362B2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {86C48FB7-09D7-47F5-A6C0-FB7C22A362B2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {86C48FB7-09D7-47F5-A6C0-FB7C22A362B2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {86C48FB7-09D7-47F5-A6C0-FB7C22A362B2}.Release|Any CPU.Build.0 = Release|Any CPU - {3458DCC4-55CB-424A-A5BF-9DB11F24D41F}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {3458DCC4-55CB-424A-A5BF-9DB11F24D41F}.Debug|Any CPU.Build.0 = Debug|Any CPU - {3458DCC4-55CB-424A-A5BF-9DB11F24D41F}.Release|Any CPU.ActiveCfg = Release|Any CPU - {3458DCC4-55CB-424A-A5BF-9DB11F24D41F}.Release|Any CPU.Build.0 = Release|Any CPU - {A0869700-2CA0-40F1-8AEA-5ADEA1204294}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {A0869700-2CA0-40F1-8AEA-5ADEA1204294}.Debug|Any CPU.Build.0 = Debug|Any CPU - {A0869700-2CA0-40F1-8AEA-5ADEA1204294}.Release|Any CPU.ActiveCfg = Release|Any CPU - {A0869700-2CA0-40F1-8AEA-5ADEA1204294}.Release|Any CPU.Build.0 = Release|Any CPU - {911B7C56-1908-42B5-BCE8-860DE650AE31}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {911B7C56-1908-42B5-BCE8-860DE650AE31}.Debug|Any CPU.Build.0 = Debug|Any CPU - {911B7C56-1908-42B5-BCE8-860DE650AE31}.Release|Any CPU.ActiveCfg = Release|Any CPU - {911B7C56-1908-42B5-BCE8-860DE650AE31}.Release|Any CPU.Build.0 = Release|Any CPU - {CAE0492C-11A3-424C-8613-7DAB83E4FB60}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {CAE0492C-11A3-424C-8613-7DAB83E4FB60}.Debug|Any CPU.Build.0 = Debug|Any CPU - {CAE0492C-11A3-424C-8613-7DAB83E4FB60}.Release|Any CPU.ActiveCfg = Release|Any CPU - {CAE0492C-11A3-424C-8613-7DAB83E4FB60}.Release|Any CPU.Build.0 = Release|Any CPU - {4D055853-DE80-4145-BB2F-33EB6B379F5E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {4D055853-DE80-4145-BB2F-33EB6B379F5E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {4D055853-DE80-4145-BB2F-33EB6B379F5E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {4D055853-DE80-4145-BB2F-33EB6B379F5E}.Release|Any CPU.Build.0 = Release|Any CPU - {E4783690-052A-4AB0-837E-BDBC77CC7EEC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {E4783690-052A-4AB0-837E-BDBC77CC7EEC}.Debug|Any CPU.Build.0 = Debug|Any CPU - {E4783690-052A-4AB0-837E-BDBC77CC7EEC}.Release|Any CPU.ActiveCfg = Release|Any CPU - {E4783690-052A-4AB0-837E-BDBC77CC7EEC}.Release|Any CPU.Build.0 = Release|Any CPU - {1859E205-88DC-4E08-A0BD-55A045DCC495}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {1859E205-88DC-4E08-A0BD-55A045DCC495}.Debug|Any CPU.Build.0 = Debug|Any CPU - {1859E205-88DC-4E08-A0BD-55A045DCC495}.Release|Any CPU.ActiveCfg = Release|Any CPU - {1859E205-88DC-4E08-A0BD-55A045DCC495}.Release|Any CPU.Build.0 = Release|Any CPU - {6ECF678D-6F3A-4084-8538-A86C1D67C703}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {6ECF678D-6F3A-4084-8538-A86C1D67C703}.Debug|Any CPU.Build.0 = Debug|Any CPU - {6ECF678D-6F3A-4084-8538-A86C1D67C703}.Release|Any CPU.ActiveCfg = Release|Any CPU - {6ECF678D-6F3A-4084-8538-A86C1D67C703}.Release|Any CPU.Build.0 = Release|Any CPU - {9FB5E943-7F6F-4281-9C00-E76284B4F1F3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {9FB5E943-7F6F-4281-9C00-E76284B4F1F3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {9FB5E943-7F6F-4281-9C00-E76284B4F1F3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {9FB5E943-7F6F-4281-9C00-E76284B4F1F3}.Release|Any CPU.Build.0 = Release|Any CPU - {D56851BB-557E-4CF9-B724-8E607EEE9D07}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D56851BB-557E-4CF9-B724-8E607EEE9D07}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D56851BB-557E-4CF9-B724-8E607EEE9D07}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D56851BB-557E-4CF9-B724-8E607EEE9D07}.Release|Any CPU.Build.0 = Release|Any CPU - {22BB3760-8DA1-4714-ADB7-1585A4EB8496}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {22BB3760-8DA1-4714-ADB7-1585A4EB8496}.Debug|Any CPU.Build.0 = Debug|Any CPU - {22BB3760-8DA1-4714-ADB7-1585A4EB8496}.Release|Any CPU.ActiveCfg = Release|Any CPU - {22BB3760-8DA1-4714-ADB7-1585A4EB8496}.Release|Any CPU.Build.0 = Release|Any CPU - {90D14180-20AC-44E6-BC7B-D9DA0868C5E1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {90D14180-20AC-44E6-BC7B-D9DA0868C5E1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {90D14180-20AC-44E6-BC7B-D9DA0868C5E1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {90D14180-20AC-44E6-BC7B-D9DA0868C5E1}.Release|Any CPU.Build.0 = Release|Any CPU - {F6A800FC-3DE0-410E-9096-92404F11E2D1}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {F6A800FC-3DE0-410E-9096-92404F11E2D1}.Debug|Any CPU.Build.0 = Debug|Any CPU - {F6A800FC-3DE0-410E-9096-92404F11E2D1}.Release|Any CPU.ActiveCfg = Release|Any CPU - {F6A800FC-3DE0-410E-9096-92404F11E2D1}.Release|Any CPU.Build.0 = Release|Any CPU - {09CDA563-DE16-41F6-B61C-56102E7D9B2E}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {09CDA563-DE16-41F6-B61C-56102E7D9B2E}.Debug|Any CPU.Build.0 = Debug|Any CPU - {09CDA563-DE16-41F6-B61C-56102E7D9B2E}.Release|Any CPU.ActiveCfg = Release|Any CPU - {09CDA563-DE16-41F6-B61C-56102E7D9B2E}.Release|Any CPU.Build.0 = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Debug|Any CPU.Build.0 = Debug|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.ActiveCfg = Release|Any CPU - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE}.Release|Any CPU.Build.0 = Release|Any CPU - {B5C96536-6387-44F4-A2E2-D4D683588AF5}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B5C96536-6387-44F4-A2E2-D4D683588AF5}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B5C96536-6387-44F4-A2E2-D4D683588AF5}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B5C96536-6387-44F4-A2E2-D4D683588AF5}.Release|Any CPU.Build.0 = Release|Any CPU - {52F5A9DE-50B8-42C6-9980-E908DC6A4B52}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {52F5A9DE-50B8-42C6-9980-E908DC6A4B52}.Debug|Any CPU.Build.0 = Debug|Any CPU - {52F5A9DE-50B8-42C6-9980-E908DC6A4B52}.Release|Any CPU.ActiveCfg = Release|Any CPU - {52F5A9DE-50B8-42C6-9980-E908DC6A4B52}.Release|Any CPU.Build.0 = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Debug|Any CPU.Build.0 = Debug|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.ActiveCfg = Release|Any CPU - {0EEA73CA-D8DD-F044-045D-F070F8831E26}.Release|Any CPU.Build.0 = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Debug|Any CPU.Build.0 = Debug|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.ActiveCfg = Release|Any CPU - {164E4514-4E84-F13A-E24E-2A743753CDB3}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection - GlobalSection(NestedProjects) = preSolution - {D5ED348D-D6F0-4093-BD7D-20E05AA1EB7B} = {55400168-8E20-4D10-A3F0-FC591271E71F} - {17EA5194-BBE8-4CE1-B6F9-DF6829622F38} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {88AA0D46-597E-4969-8382-A3F8054B9409} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {CAC0D3A2-8BFA-4A84-A7FA-550A3BB16288} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {81CB5141-4FC5-413A-A516-CD65F40465C0} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {F5023AD3-D9C5-40C9-B76A-58D95E441997} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {4FD7B21B-3689-4D4A-BDD2-A07E2DC2E80C} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {FF3A193B-6131-4B4D-9729-1BF8A125C0AB} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {18A20311-84D8-49C4-B7BA-1187FF25E9BC} = {54C52918-0B8B-4036-B673-23BE74AFFA95} - {2C3FABD7-808B-47B5-A194-849A1738E9A2} = {927A4A04-56EF-4A0F-B17C-E80ABA78C554} - {8BE6BA3E-048E-4FC7-81DD-7FCD29AE2126} = {7AF97C49-F445-4D77-9DBF-1A211933A471} - {9E213E6F-77CB-4068-93EB-465C47FDA8FA} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {EEE9DF30-1901-4070-8E03-A8D8A0E10E34} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {CE1B9AD0-7CDA-4459-86A3-A3162C1095D9} = {927A4A04-56EF-4A0F-B17C-E80ABA78C554} - {2CA34976-4A80-485C-8572-6004829BB727} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {44E4EBFA-6F25-4FD7-A4B3-536C3A42677C} = {7C1D7F97-1D2C-47F3-B3E7-8275D57267C4} - {6489B162-2B28-42B9-9AD4-EB5CCBB8AE85} = {7C1D7F97-1D2C-47F3-B3E7-8275D57267C4} - {B6246B7A-4095-433A-B981-5D1E43CDF712} = {7C1D7F97-1D2C-47F3-B3E7-8275D57267C4} - {4B20572A-10E7-4414-943A-974F275677B4} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {9F96F261-93F7-47C0-8F07-72CE39CE20A3} = {035B86BF-DD63-4A78-B8CE-29994860C948} - {8395DA41-AF40-4B0D-B36D-FA8A56E75AED} = {035B86BF-DD63-4A78-B8CE-29994860C948} - {B3C2AFCC-EE59-4CB4-AB62-B90D60335632} = {035B86BF-DD63-4A78-B8CE-29994860C948} - {A03A98B6-19E9-4CCA-9801-AEFCBAAF5B72} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {00AB0A7E-578E-469C-B049-BCAA0233A9DD} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {90B326F6-99DF-4EEC-A480-26C27EE22237} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {96EBCB1F-DB7B-40BA-B59E-82FC1AE13EA0} = {927A4A04-56EF-4A0F-B17C-E80ABA78C554} - {6399C2FB-B063-4BB3-B605-88CE5303198B} = {927A4A04-56EF-4A0F-B17C-E80ABA78C554} - {D2F6105D-D667-46DB-8CDA-89B4D3F69067} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {CE550720-FA77-4FF3-B5F0-A2B7A1781E61} = {7B82C484-4DDF-45F2-B5FC-DFA9FFC3258B} - {ECA9D3FA-248F-4D0E-A612-FE1CC72241D5} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {C2F7971A-CFCE-4BE0-9A3A-805972A5F00B} = {7B82C484-4DDF-45F2-B5FC-DFA9FFC3258B} - {0DA0B251-66A6-441C-91B3-DFF953C53C4A} = {7B82C484-4DDF-45F2-B5FC-DFA9FFC3258B} - {E71FE3BB-1793-460F-9802-77FB9BBC1356} = {7B82C484-4DDF-45F2-B5FC-DFA9FFC3258B} - {927A4A04-56EF-4A0F-B17C-E80ABA78C554} = {54C52918-0B8B-4036-B673-23BE74AFFA95} - {7AF97C49-F445-4D77-9DBF-1A211933A471} = {54C52918-0B8B-4036-B673-23BE74AFFA95} - {9A5CDAEF-3767-4924-810E-C2018EFB5124} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {EE20EC4E-9C09-485A-8FBF-AF7FE253714D} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {B08298CE-D261-4990-8458-17341992AD01} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {9D0D219B-AC06-4371-9BA1-630BC00FE0F0} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {ADFC9BA9-405D-4900-B5A3-D7A6F6EED38B} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {0B7492A2-7B11-4BC1-A55D-5756B74F0055} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {92808D98-A096-4C4D-A038-A1D359812E32} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {D2019F8C-BD18-4DB5-9C38-1AF511D511FC} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {57ED879F-2A6F-4618-AD0C-5896CAFA3902} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {9A21CDDA-E03F-432B-A539-D553B69E1B5E} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {A3CC8323-B8C0-402E-B0CF-F67029E5E9E9} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {0DC9EE7D-7A8E-4CC7-AE0B-CBA74B5C3F72} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {E2327757-4988-4710-8A67-06A7EEC12DFA} = {26C224A8-EA29-4FB9-BA1D-9FFA1D8608E7} - {28AFEB19-6CDE-4AD9-9A83-BDCD98C3E386} = {26C224A8-EA29-4FB9-BA1D-9FFA1D8608E7} - {B281B9FE-8F1F-471C-B399-C1D07DF575E4} = {26C224A8-EA29-4FB9-BA1D-9FFA1D8608E7} - {927AD997-604B-4553-B768-8BFC595E9D62} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {76AF3503-CB33-4DFA-BE4F-F2EBB51EEA07} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {F2DEFDB5-29FD-44B9-A22C-A7D857BA60A0} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {004C3502-A1E2-4CCC-AB8E-E823FCE3E916} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {1E26260F-8D99-4F9D-B20F-4B4B12A315E1} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {A675EBDA-0021-406A-A0AA-5B27AF2902E0} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {7927F5D8-D950-45E5-B832-894A325445DC} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {749899E3-86F3-48FD-AF09-BBFDA8E0EA36} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {74500EF4-93FE-4B84-A538-BA94CEE73E92} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {8420F159-401F-48F9-A206-CA5D5B0B4CDE} = {459DEA84-19F7-49A2-BD23-F5B871DFF92D} - {7E7E8768-198D-400A-B8C4-7E86BB38BE4E} = {459DEA84-19F7-49A2-BD23-F5B871DFF92D} - {86C48FB7-09D7-47F5-A6C0-FB7C22A362B2} = {459DEA84-19F7-49A2-BD23-F5B871DFF92D} - {3458DCC4-55CB-424A-A5BF-9DB11F24D41F} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {A0869700-2CA0-40F1-8AEA-5ADEA1204294} = {AD002164-CFB4-4583-BF13-62C815009ADE} - {911B7C56-1908-42B5-BCE8-860DE650AE31} = {AD002164-CFB4-4583-BF13-62C815009ADE} - {CAE0492C-11A3-424C-8613-7DAB83E4FB60} = {AD002164-CFB4-4583-BF13-62C815009ADE} - {4D055853-DE80-4145-BB2F-33EB6B379F5E} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {E4783690-052A-4AB0-837E-BDBC77CC7EEC} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {1859E205-88DC-4E08-A0BD-55A045DCC495} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {6ECF678D-6F3A-4084-8538-A86C1D67C703} = {9C73D4E6-4408-4717-B51C-63C20321D4DA} - {9FB5E943-7F6F-4281-9C00-E76284B4F1F3} = {9C73D4E6-4408-4717-B51C-63C20321D4DA} - {D56851BB-557E-4CF9-B724-8E607EEE9D07} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {22BB3760-8DA1-4714-ADB7-1585A4EB8496} = {618DAF98-06CE-48BB-8A48-60C92C55F9FC} - {618DAF98-06CE-48BB-8A48-60C92C55F9FC} = {F1CCBEC7-ACAB-4DC5-909E-D8CC2E1B7EEC} - {52E78BD0-DB63-4C5A-A88E-9AD3EFB2E618} = {F1CCBEC7-ACAB-4DC5-909E-D8CC2E1B7EEC} - {90D14180-20AC-44E6-BC7B-D9DA0868C5E1} = {52E78BD0-DB63-4C5A-A88E-9AD3EFB2E618} - {F6A800FC-3DE0-410E-9096-92404F11E2D1} = {52E78BD0-DB63-4C5A-A88E-9AD3EFB2E618} - {55400168-8E20-4D10-A3F0-FC591271E71F} = {6CB521FC-AC40-49A6-B9A5-91399CAA59AB} - {9CD04B74-AA10-4253-BEEC-4837D48AD3EB} = {6CB521FC-AC40-49A6-B9A5-91399CAA59AB} - {09CDA563-DE16-41F6-B61C-56102E7D9B2E} = {9CD04B74-AA10-4253-BEEC-4837D48AD3EB} - {7CF83493-6AF5-9C6D-01A7-AC7FC11BC2CE} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - {B5C96536-6387-44F4-A2E2-D4D683588AF5} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {52F5A9DE-50B8-42C6-9980-E908DC6A4B52} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {0EEA73CA-D8DD-F044-045D-F070F8831E26} = {7844FF58-7DBF-46E1-88B7-9764382A4EE9} - {164E4514-4E84-F13A-E24E-2A743753CDB3} = {6DA78E72-BA55-4ECF-97DB-6258174D3E2A} - EndGlobalSection - GlobalSection(ExtensibilityGlobals) = postSolution - SolutionGuid = {6BB7A5DE-DA12-44DC-BC9B-0F6CA524346F} - EndGlobalSection -EndGlobal diff --git a/aspnet-core/LINGYUN.MicroService.Workflow.slnx b/aspnet-core/LINGYUN.MicroService.Workflow.slnx new file mode 100644 index 000000000..0b1b54910 --- /dev/null +++ b/aspnet-core/LINGYUN.MicroService.Workflow.slnx @@ -0,0 +1,118 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs index 595dd2a89..695cd4fef 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/AIServiceModule.Configure.cs @@ -18,8 +18,9 @@ using Microsoft.Extensions.AI; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp.AspNetCore.Mvc; @@ -281,7 +282,7 @@ public partial class AIServiceModule configuration["AuthServer:Authority"]!, new Dictionary { - { "AIService", "AI Service API"} + { configuration["AuthServer:Audience"]!, "Identity Service API"} }, options => { @@ -302,25 +303,18 @@ public partial class AIServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..ddf19cb69 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,40 @@ +using Microsoft.OpenApi; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs similarity index 84% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/TenantHeaderParamter.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs index f72407569..db9c69424 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/TenantHeaderParamter.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -1,10 +1,9 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.MultiTenancy; -namespace LINGYUN.Abp.MicroService.AIService; +namespace Swashbuckle.AspNetCore.SwaggerGen; public class TenantHeaderParamter : IOperationFilter { @@ -22,7 +21,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/appsettings.Development.json index 3d9679901..095e88d8f 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AIService/appsettings.Development.json @@ -59,7 +59,7 @@ }, "AuthServer": { "Authority": "http://localhost:44385/", - "Audience": "admin-service", + "Audience": "ai-service", "ValidAudiences": [ "lingyun-abp-application" ], "MapInboundClaims": false, "RequireHttpsMetadata": false, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsDbContext.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsDbContext.cs index 3c77d0d02..c5f20a180 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsDbContext.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsDbContext.cs @@ -37,6 +37,8 @@ public class AdminServiceMigrationsDbContext : public DbSet PermissionGrants { get; set; } + public DbSet ResourcePermissionGrants { get; set; } + public DbSet Settings { get; set; } public DbSet SettingDefinitionRecords { get; set; } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsEntityFrameworkCoreModule.cs index bb10e3513..7c9944faa 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/AdminServiceMigrationsEntityFrameworkCoreModule.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.Account; using LINGYUN.Abp.Auditing; +using LINGYUN.Abp.BlobManagement; using LINGYUN.Abp.CachingManagement; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.DataProtectionManagement; @@ -14,7 +15,6 @@ using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.MessageService; using LINGYUN.Abp.Notifications; using LINGYUN.Abp.OpenIddict; -using LINGYUN.Abp.OssManagement; using LINGYUN.Abp.ProjectManagement; using LINGYUN.Abp.RulesEngineManagement; using LINGYUN.Abp.Saas; @@ -49,7 +49,7 @@ namespace LINGYUN.Abp.MicroService.AdminService; typeof(AbpIdentityServerApplicationContractsModule), typeof(AbpLocalizationManagementApplicationContractsModule), typeof(AbpOpenIddictApplicationContractsModule), - typeof(AbpOssManagementApplicationContractsModule), + typeof(AbpBlobManagementApplicationContractsModule), typeof(AbpPermissionManagementApplicationContractsModule), typeof(PlatformApplicationContractModule), typeof(AbpProjectManagementApplicationContractsModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore.csproj index 1d3057457..9f44a4cad 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore.csproj @@ -36,7 +36,7 @@ - + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.Designer.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.Designer.cs new file mode 100644 index 000000000..1644c9dca --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.Designer.cs @@ -0,0 +1,1086 @@ +// +using System; +using LINGYUN.Abp.MicroService.AdminService; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.AdminService.Migrations +{ + [DbContext(typeof(AdminServiceMigrationsDbContext))] + [Migration("20260403034826_Upgrade-Abp-Framework-To-10-2-0")] + partial class UpgradeAbpFrameworkTo1020 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("integer"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("timestamp with time zone"); + + b.Property("EditionId") + .HasColumnType("uuid"); + + b.Property("EnableTime") + .HasColumnType("timestamp with time zone"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("boolean"); + + b.Property("IsLayout") + .HasColumnType("boolean"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("smallint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("boolean"); + + b.Property("IsInherited") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.cs new file mode 100644 index 000000000..04e1ec0f0 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/20260403034826_Upgrade-Abp-Framework-To-10-2-0.cs @@ -0,0 +1,109 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.AdminService.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1020 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(128)", + oldMaxLength: 128); + + migrationBuilder.AddColumn( + name: "ManagementPermissionName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: true); + + migrationBuilder.AddColumn( + name: "ResourceName", + table: "AbpPermissions", + type: "character varying(256)", + maxLength: 256, + nullable: true); + + migrationBuilder.CreateTable( + name: "AbpResourcePermissionGrants", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ResourceName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ResourceKey = table.Column(type: "character varying(256)", maxLength: 256, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpResourcePermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions", + columns: new[] { "ResourceName", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_Reso~", + table: "AbpResourcePermissionGrants", + columns: new[] { "TenantId", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }, + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpResourcePermissionGrants"); + + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ManagementPermissionName", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ResourceName", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "character varying(128)", + oldMaxLength: 128, + oldNullable: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/AdminServiceMigrationsDbContextModelSnapshot.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/AdminServiceMigrationsDbContextModelSnapshot.cs index 4a1291c45..4a4b14122 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/AdminServiceMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService.EntityFrameworkCore/Migrations/AdminServiceMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LINGYUN.Abp.MicroService.AdminService.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) - .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("ProductVersion", "10.0.2") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -777,13 +777,16 @@ namespace LINGYUN.Abp.MicroService.AdminService.Migrations .HasColumnName("ExtraProperties"); b.Property("GroupName") - .IsRequired() .HasMaxLength(128) .HasColumnType("character varying(128)"); b.Property("IsEnabled") .HasColumnType("boolean"); + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + b.Property("MultiTenancySide") .HasColumnType("smallint"); @@ -800,6 +803,10 @@ namespace LINGYUN.Abp.MicroService.AdminService.Migrations .HasMaxLength(128) .HasColumnType("character varying(128)"); + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + b.Property("StateCheckers") .HasMaxLength(256) .HasColumnType("character varying(256)"); @@ -808,7 +815,7 @@ namespace LINGYUN.Abp.MicroService.AdminService.Migrations b.HasIndex("GroupName"); - b.HasIndex("Name") + b.HasIndex("ResourceName", "Name") .IsUnique(); b.ToTable("AbpPermissions", (string)null); @@ -873,6 +880,48 @@ namespace LINGYUN.Abp.MicroService.AdminService.Migrations b.ToTable("AbpPermissionGroups", (string)null); }); + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.Configure.cs index 9317ac1a2..a391e2c31 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.Configure.cs @@ -14,8 +14,9 @@ using Microsoft.AspNetCore.DataProtection; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp.AspNetCore.Mvc; @@ -272,7 +273,7 @@ public partial class AdminServiceModule configuration["AuthServer:Authority"]!, new Dictionary { - { "AdminService", "Admin Service API"} + { configuration["AuthServer:Audience"]!, "Identity Service API"} }, options => { @@ -293,25 +294,18 @@ public partial class AdminServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs index 1a615061e..d5198f7e1 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/AdminServiceModule.cs @@ -17,7 +17,6 @@ using LINGYUN.Abp.FeatureManagement.HttpApi; using LINGYUN.Abp.Identity.Session.AspNetCore; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.Logging.Serilog.Elasticsearch; -using LINGYUN.Abp.OssManagement.SettingManagement; using LINGYUN.Abp.PermissionManagement; using LINGYUN.Abp.PermissionManagement.HttpApi; using LINGYUN.Abp.PermissionManagement.OrganizationUnits; @@ -59,7 +58,6 @@ namespace LINGYUN.Abp.MicroService.AdminService; typeof(AbpTencentCloudSettingManagementModule), // typeof(AbpWeChatSettingManagementModule), typeof(AbpWxPusherSettingManagementModule), - typeof(AbpOssManagementSettingManagementModule), typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementHttpApiModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/SettingMergeController.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/SettingMergeController.cs new file mode 100644 index 000000000..7b41e6166 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/SettingMergeController.cs @@ -0,0 +1,70 @@ +using LINGYUN.Abp.SettingManagement; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.MicroService.AdminService.Controllers; + +[ExposeServices( + typeof(SettingController), + typeof(SettingMergeController))] +public class SettingMergeController : SettingController +{ + private readonly SettingManagementMergeOptions _mergeOptions; + public SettingMergeController( + ISettingAppService settingAppService, + ISettingTestAppService settingTestAppService, + IOptions mergeOptions) + : base(settingAppService, settingTestAppService) + { + _mergeOptions = mergeOptions.Value; + } + + [HttpGet] + [Route("by-current-tenant")] + public async override Task GetAllForCurrentTenantAsync() + { + var result = new SettingGroupResult(); + var markTypeMap = new List + { + typeof(SettingMergeController), + }; + foreach (var serviceType in _mergeOptions.GlobalSettingProviders + .Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) + { + var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As(); + var currentResult = await settingService.GetAllForCurrentTenantAsync(); + foreach (var group in currentResult.Items) + { + result.AddGroup(group); + } + markTypeMap.Add(serviceType); + } + + return result; + } + + [HttpGet] + [Route("by-global")] + public async override Task GetAllForGlobalAsync() + { + var result = new SettingGroupResult(); + var markTypeMap = new List + { + typeof(SettingMergeController), + }; + foreach (var serviceType in _mergeOptions.GlobalSettingProviders + .Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) + { + var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As(); + var currentResult = await settingService.GetAllForGlobalAsync(); + foreach (var group in currentResult.Items) + { + result.AddGroup(group); + } + markTypeMap.Add(serviceType); + } + + return result; + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/UserSettingMergeController.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/UserSettingMergeController.cs new file mode 100644 index 000000000..15b629ced --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Controllers/UserSettingMergeController.cs @@ -0,0 +1,45 @@ +using LINGYUN.Abp.SettingManagement; +using Microsoft.AspNetCore.Mvc; +using Microsoft.Extensions.Options; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.MicroService.AdminService.Controllers; + +[ExposeServices( + typeof(UserSettingController), + typeof(UserSettingMergeController))] +public class UserSettingMergeController : UserSettingController +{ + private readonly SettingManagementMergeOptions _mergeOptions; + public UserSettingMergeController( + IUserSettingAppService service, + IOptions mergeOptions) + : base(service) + { + _mergeOptions = mergeOptions.Value; + } + + [HttpGet] + [Route("by-current-user")] + public async override Task GetAllForCurrentUserAsync() + { + var result = new SettingGroupResult(); + var markTypeMap = new List + { + typeof(UserSettingMergeController), + }; + foreach (var serviceType in _mergeOptions.UserSettingProviders + .Where(type => !markTypeMap.Any(markType => type.IsAssignableFrom(markType)))) + { + var settingService = LazyServiceProvider.LazyGetRequiredService(serviceType).As(); + var currentResult = await settingService.GetAllForCurrentUserAsync(); + foreach (var group in currentResult.Items) + { + result.AddGroup(group); + } + markTypeMap.Add(serviceType); + } + + return result; + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj index 3ba8b7013..f6010ebc6 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/LINGYUN.Abp.MicroService.AdminService.csproj @@ -69,7 +69,6 @@ - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..ddf19cb69 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,40 @@ +using Microsoft.OpenApi; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs similarity index 83% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/TenantHeaderParamter.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs index d06c39b4e..db9c69424 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/TenantHeaderParamter.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AdminService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -1,10 +1,9 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.MultiTenancy; -namespace LINGYUN.Abp.MicroService.AdminService; +namespace Swashbuckle.AspNetCore.SwaggerGen; public class TenantHeaderParamter : IOperationFilter { @@ -22,7 +21,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/ApiGatewayModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/ApiGatewayModule.cs index c17983c28..2f200d72e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/ApiGatewayModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/ApiGatewayModule.cs @@ -1,5 +1,4 @@ -using Autofac.Core; -using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; +using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; using Microsoft.AspNetCore.Authentication.JwtBearer; @@ -8,8 +7,7 @@ using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.WebSockets; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/yarp.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/yarp.json index 6b9fa6d9e..0b523b419 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/yarp.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.ApiGateway/yarp.json @@ -404,10 +404,10 @@ } ] }, - "oss-management-route": { + "blob-management-route": { "ClusterId": "platform-service-cluster", "Match": { - "Path": "/api/oss-management/{**everything}" + "Path": "/api/blob-management/{**everything}" }, "Transforms": [ { diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AppHost/AppHost.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AppHost/AppHost.cs index 74b86e32c..cf5b01b09 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AppHost/AppHost.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AppHost/AppHost.cs @@ -3,10 +3,18 @@ using Microsoft.Extensions.Hosting; var builder = DistributedApplication.CreateBuilder(args); // Redis -var redis = builder.AddRedis("redis") +var redis = builder.AddRedis("redis", + password: builder.AddParameter("redis-password", "123456", secret: true)) .WithContainerName("redis") .WithDataVolume("redis-dev"); +if (builder.Environment.IsDevelopment()) +{ +#pragma warning disable ASPIRECERTIFICATES001 + redis.WithoutHttpsCertificate(); +#pragma warning restore ASPIRECERTIFICATES001 +} + // Elasticsearch var elasticsearch = builder.AddElasticsearch("elasticsearch") .WithContainerName("elasticsearch") diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs index b3722a46d..f19bb7e10 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs @@ -203,6 +203,7 @@ public class OpenIddictDataSeeder : OpenIddictDataSeedContributorBase, ITransien "api-gateway", "auth-server", "admin-service", + "ai-service", "identity-service", "localization-service", "message-service", @@ -423,6 +424,27 @@ public class OpenIddictDataSeeder : OpenIddictDataSeedContributorBase, ITransien "workflow-service", } }); + // AI Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "ai-service", + DisplayName = "Artificial Intelligence Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "AI管理服务", + [CultureInfo.GetCultureInfo("en")] = "Artificial Intelligence Service" + }, + Description = "适用于AI管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于AI管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Artificial Intelligence service Swagger authorization" + }, + Resources = + { + "ai-service", + } + }); } private async Task CreateApplicationAsync(string scope) @@ -530,6 +552,7 @@ public class OpenIddictDataSeeder : OpenIddictDataSeedContributorBase, ITransien "api-gateway", "auth-server", "admin-service", + "ai-service", "identity-service", "localization-service", "message-service", diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.Designer.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.Designer.cs new file mode 100644 index 000000000..7709bfea0 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.Designer.cs @@ -0,0 +1,1361 @@ +// +using System; +using LINGYUN.Abp.MicroService.AuthServer; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.AuthServer.Migrations +{ + [DbContext(typeof(AuthServerMigrationsDbContext))] + [Migration("20260402040021_Upgrade-Abp-Framework-To-10-2-0")] + partial class UpgradeAbpFrameworkTo1020 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Data") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("timestamp with time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Required") + .HasColumnType("boolean"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("SourceTenantId") + .HasColumnType("uuid"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("TargetTenantId") + .HasColumnType("uuid"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("LastAccessed") + .HasColumnType("timestamp with time zone"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SignedIn") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("timestamp with time zone"); + + b.Property("LastSignInTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("boolean"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EndTime") + .HasColumnType("timestamp with time zone"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("timestamp with time zone"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("bytea"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("ClientSecret") + .HasColumnType("text"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientUri") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("text"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("text"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("text"); + + b.Property("Permissions") + .HasColumnType("text"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedirectUris") + .HasColumnType("text"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Settings") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Descriptions") + .HasColumnType("text"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Resources") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("AuthorizationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("jsonb"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.cs new file mode 100644 index 000000000..1ffc098c7 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260402040021_Upgrade-Abp-Framework-To-10-2-0.cs @@ -0,0 +1,91 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.AuthServer.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1020 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "bytea", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + UserId = table.Column(type: "uuid", nullable: false), + Data = table.Column(type: "jsonb", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + Password = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs index 4c8d54fd1..899ae3538 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LINGYUN.Abp.MicroService.AuthServer.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) - .HasAnnotation("ProductVersion", "10.0.0") + .HasAnnotation("ProductVersion", "10.0.2") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -458,6 +458,15 @@ namespace LINGYUN.Abp.MicroService.AuthServer.Migrations b.Property("LastPasswordChangeTime") .HasColumnType("timestamp with time zone"); + b.Property("LastSignInTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("boolean") @@ -653,6 +662,47 @@ namespace LINGYUN.Abp.MicroService.AuthServer.Migrations b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("bytea"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -1151,6 +1201,62 @@ namespace LINGYUN.Abp.MicroService.AuthServer.Migrations .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("jsonb"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -1233,6 +1339,10 @@ namespace LINGYUN.Abp.MicroService.AuthServer.Migrations b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.Configure.cs index 1fcff9aa7..cc7aab740 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.Configure.cs @@ -1,6 +1,5 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.MultiTenancy; -using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement; using LINGYUN.Abp.MicroService.AuthServer.Ui.Branding; @@ -15,13 +14,11 @@ using LINGYUN.Abp.Wrapper; using Medallion.Threading; using Medallion.Threading.Redis; using Microsoft.AspNetCore.Authentication.Cookies; -using Microsoft.AspNetCore.Builder; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Extensions.DependencyInjection; using Microsoft.AspNetCore.Hosting; using Microsoft.AspNetCore.Identity; -using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -40,7 +37,6 @@ using System.Text.Unicode; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.AspNetCore.Mvc.UI.Bundling; using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; -using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling; using Volo.Abp.Auditing; using Volo.Abp.BlobStoring; using Volo.Abp.Caching; @@ -168,15 +164,6 @@ public partial class AuthServerModule { Configure(options => { - // all container use oss management - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - // use oss management - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs index 69cc9f1e4..fb50fac4f 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/AuthServerModule.cs @@ -5,13 +5,14 @@ using LINGYUN.Abp.AspNetCore.HttpOverrides; using LINGYUN.Abp.AspNetCore.MultiTenancy; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.Web; +using LINGYUN.Abp.Identity.AspNetCore; using LINGYUN.Abp.Identity.AspNetCore.Session; using LINGYUN.Abp.Identity.OrganizaztionUnits; using LINGYUN.Abp.Identity.Session.AspNetCore; @@ -32,6 +33,7 @@ using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching.StackExchangeRedis; +using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.Identity; @@ -45,13 +47,14 @@ namespace LINGYUN.Abp.MicroService.AuthServer; typeof(AbpAccountHttpApiModule), typeof(AbpAccountWebOpenIddictModule), typeof(AbpAccountWebOAuthModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpGdprApplicationModule), typeof(AbpGdprHttpApiModule), typeof(AbpGdprWebModule), typeof(AbpAspNetCoreMvcUiLeptonXLiteThemeModule), typeof(AbpAutofacModule), typeof(AbpCachingStackExchangeRedisModule), + typeof(AbpIdentityAspNetCoreModule), typeof(AbpIdentityAspNetCoreSessionModule), typeof(AbpOpenIddictAspNetCoreSessionModule), typeof(AbpIdentitySessionAspNetCoreModule), @@ -69,7 +72,8 @@ namespace LINGYUN.Abp.MicroService.AuthServer; typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpHttpClientIdentityModelWebModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpEmailingPlatformModule), typeof(AbpSmsPlatformModule), typeof(AbpCAPEventBusModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj index a571c5741..cd720576e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/LINGYUN.Abp.MicroService.AuthServer.csproj @@ -31,6 +31,7 @@ + @@ -41,13 +42,14 @@ - + +
@@ -56,6 +58,7 @@ + @@ -69,7 +72,6 @@ - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/appsettings.Development.json index 63f3ac93b..4714cca37 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.AuthServer/appsettings.Development.json @@ -80,10 +80,14 @@ "Configuration": "localhost,defaultDatabase=10", "InstanceName": "LINGYUN.Abp.Application" }, - "OssManagement": { - "Bucket": "users" + "BlobManagement": { + "ContainerName": "users" }, "RemoteServices": { + "BlobManagement": { + "BaseUrl": "http://localhost:30025", + "UseCurrentAccessToken": true + }, "Platform": { "BaseUrl": "http://localhost:30025", "UseCurrentAccessToken": false diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.Configure.cs index 33d7e661c..4452a1b4e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.Configure.cs @@ -1,5 +1,4 @@ using DotNetCore.CAP; -using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.Identity.Session; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement; @@ -17,10 +16,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -108,15 +109,6 @@ public partial class IdentityServiceModule { Configure(options => { - // all container use oss management - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - // use oss management - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); }); } @@ -316,25 +308,18 @@ public partial class IdentityServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs index 2494c33f3..ae090abaf 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/IdentityServiceModule.cs @@ -4,16 +4,17 @@ using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Gdpr.Identity; using LINGYUN.Abp.Identity; +using LINGYUN.Abp.Identity.AspNetCore; using LINGYUN.Abp.Identity.EntityFrameworkCore; using LINGYUN.Abp.Identity.Session.AspNetCore; using LINGYUN.Abp.Localization.CultureMap; @@ -35,6 +36,7 @@ using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.EntityFrameworkCore.PostgreSql; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Modularity; using Volo.Abp.OpenIddict.EntityFrameworkCore; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -51,6 +53,7 @@ namespace LINGYUN.Abp.MicroService.IdentityService; typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpAccountApplicationModule), typeof(AbpAccountHttpApiModule), + typeof(AbpIdentityAspNetCoreModule), typeof(AbpIdentityApplicationModule), typeof(AbpIdentityHttpApiModule), typeof(AbpIdentityEntityFrameworkCoreModule), @@ -70,9 +73,9 @@ namespace LINGYUN.Abp.MicroService.IdentityService; typeof(AbpAuthorizationOrganizationUnitsModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpEmailingExceptionHandlingModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), + typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpCAPEventBusModule), - typeof(AbpHttpClientModule), typeof(AbpSmsPlatformModule), typeof(AbpEmailingPlatformModule), typeof(AbpCachingStackExchangeRedisModule), @@ -81,7 +84,7 @@ namespace LINGYUN.Abp.MicroService.IdentityService; typeof(AbpIdentitySessionAspNetCoreModule), typeof(AbpAspNetCoreHttpOverridesModule), typeof(AbpAspNetCoreMvcWrapperModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj index 701c75044..28b410240 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/LINGYUN.Abp.MicroService.IdentityService.csproj @@ -32,7 +32,7 @@ - + @@ -48,7 +48,7 @@ - + @@ -64,6 +64,7 @@ + @@ -71,7 +72,7 @@ - + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs similarity index 84% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/TenantHeaderParamter.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs index a4efd101c..25809383e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/TenantHeaderParamter.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -1,11 +1,10 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.MultiTenancy; -namespace LINGYUN.Abp.MicroService.WeChatService; +namespace Swashbuckle.AspNetCore.SwaggerGen; public class TenantHeaderParamter : IOperationFilter { @@ -23,7 +22,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/appsettings.Development.json index e9a1e8d64..8d1c4cecd 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/appsettings.Development.json @@ -70,6 +70,10 @@ "InstanceName": "LINGYUN.Abp.Application" }, "RemoteServices": { + "BlobManagement": { + "BaseUrl": "http://localhost:30025", + "UseCurrentAccessToken": true + }, "Platform": { "BaseUrl": "http://localhost:30025", "UseCurrentAccessToken": false @@ -88,8 +92,8 @@ "IndexPrefix": "abp.dev.auditing" } }, - "OssManagement": { - "Bucket": "users" + "BlobManagement": { + "ContainerName": "users" }, "Elasticsearch": { "NodeUris": "http://elasticsearch" diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.Configure.cs index 03d3f29d4..e1b21d7a1 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/LocalizationServiceModule.Configure.cs @@ -13,10 +13,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -232,25 +234,18 @@ public partial class LocalizationServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs similarity index 84% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/TenantHeaderParamter.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs index e57d616e7..25809383e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/TenantHeaderParamter.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -1,11 +1,10 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.MultiTenancy; -namespace LINGYUN.Abp.MicroService.WorkflowService; +namespace Swashbuckle.AspNetCore.SwaggerGen; public class TenantHeaderParamter : IOperationFilter { @@ -23,7 +22,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/TenantHeaderParamter.cs deleted file mode 100644 index 40df63491..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.LocalizationService/TenantHeaderParamter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; -using System.Collections.Generic; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.MicroService.LocalizationService; - -public class TenantHeaderParamter : IOperationFilter -{ - private readonly AbpMultiTenancyOptions _multiTenancyOptions; - private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; - public TenantHeaderParamter( - IOptions multiTenancyOptions, - IOptions aspNetCoreMultiTenancyOptions) - { - _multiTenancyOptions = multiTenancyOptions.Value; - _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; - } - - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (_multiTenancyOptions.IsEnabled) - { - operation.Parameters = operation.Parameters ?? new List(); - operation.Parameters.Add(new OpenApiParameter - { - Name = _aspNetCoreMultiTenancyOptions.TenantKey, - In = ParameterLocation.Header, - Description = "Tenant Id/Name in http header", - Required = false - }); - } - } -} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore/MessageServiceDbMigrationEventHandler.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore/MessageServiceDbMigrationEventHandler.cs index 380738f01..4b28e3993 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore/MessageServiceDbMigrationEventHandler.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService.EntityFrameworkCore/MessageServiceDbMigrationEventHandler.cs @@ -35,11 +35,6 @@ public class MessageServiceDbMigrationEventHandler : EfCoreDatabaseMigrationEven protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - if (!schemaMigrated) - { - return; - } - using (CurrentTenant.Change(eventData.Id)) { await SendNotificationAsync(eventData); diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.Configure.cs index e3a02dae8..e82a9f1e8 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/MessageServiceModule.Configure.cs @@ -19,11 +19,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -340,25 +342,18 @@ public partial class MessageServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs similarity index 84% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/TenantHeaderParamter.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs index 5b8a07b18..25809383e 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.IdentityService/TenantHeaderParamter.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -1,11 +1,10 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; +using Microsoft.OpenApi; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.MultiTenancy; -namespace LINGYUN.Abp.MicroService.IdentityService; +namespace Swashbuckle.AspNetCore.SwaggerGen; public class TenantHeaderParamter : IOperationFilter { @@ -23,7 +22,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/TenantHeaderParamter.cs deleted file mode 100644 index b78b7ef01..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/TenantHeaderParamter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; -using System.Collections.Generic; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.MicroService.MessageService; - -public class TenantHeaderParamter : IOperationFilter -{ - private readonly AbpMultiTenancyOptions _multiTenancyOptions; - private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; - public TenantHeaderParamter( - IOptions multiTenancyOptions, - IOptions aspNetCoreMultiTenancyOptions) - { - _multiTenancyOptions = multiTenancyOptions.Value; - _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; - } - - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (_multiTenancyOptions.IsEnabled) - { - operation.Parameters = operation.Parameters ?? new List(); - operation.Parameters.Add(new OpenApiParameter - { - Name = _aspNetCoreMultiTenancyOptions.TenantKey, - In = ParameterLocation.Header, - Description = "Tenant Id/Name in http header", - Required = false - }); - } - } -} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/appsettings.Development.json index 829074aa6..322085e37 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.MessageService/appsettings.Development.json @@ -117,7 +117,7 @@ "MinimumLevel": { "Default": "Information", "Override": { - "Microsoft.EntityFrameworkCore": "Information", + "Microsoft.EntityFrameworkCore": "Warning", "DotNetCore.CAP": "Information", "System": "Warning", "Microsoft": "Warning", diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/LINGYUN.Abp.MicroService.PlatformService.DbMigrator.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/LINGYUN.Abp.MicroService.PlatformService.DbMigrator.csproj index ea5fcbe4e..7fc7cf4a6 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/LINGYUN.Abp.MicroService.PlatformService.DbMigrator.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/LINGYUN.Abp.MicroService.PlatformService.DbMigrator.csproj @@ -30,6 +30,10 @@ + + + + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/PlatformServiceDbMigratorModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/PlatformServiceDbMigratorModule.cs index 0fb56cf52..ebb51539c 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/PlatformServiceDbMigratorModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.DbMigrator/PlatformServiceDbMigratorModule.cs @@ -1,10 +1,18 @@ -using Volo.Abp.Autofac; +using LINGYUN.Abp.BlobManagement.Aliyun; +using LINGYUN.Abp.BlobManagement.FileSystem; +using LINGYUN.Abp.BlobManagement.Minio; +using LINGYUN.Abp.BlobManagement.Tencent; +using Volo.Abp.Autofac; using Volo.Abp.Modularity; namespace LINGYUN.Abp.MicroService.PlatformService; [DependsOn( typeof(AbpAutofacModule), + typeof(AbpBlobManagementAliyunModule), + typeof(AbpBlobManagementFileSystemModule), + typeof(AbpBlobManagementMinioModule), + typeof(AbpBlobManagementTencentModule), typeof(PlatformServiceMigrationsEntityFrameworkCoreModule) )] public class PlatformServiceDbMigratorModule : AbpModule diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore.csproj index 9650d9af3..b4efe038f 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore.csproj @@ -23,6 +23,7 @@ + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.Designer.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.Designer.cs new file mode 100644 index 000000000..303f551c1 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.Designer.cs @@ -0,0 +1,1488 @@ +// +using System; +using LINGYUN.Abp.MicroService.PlatformService; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.PlatformService.Migrations +{ + [DbContext(typeof(PlatformServiceMigrationsDbContext))] + [Migration("20260411023117_Add-Blob-Management-Module")] + partial class AddBlobManagementModule + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("character varying(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BodyTransferEncoding") + .HasColumnType("integer"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("boolean"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("uuid"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("timestamp with time zone"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.cs new file mode 100644 index 000000000..5ef9e314f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/20260411023117_Add-Blob-Management-Module.cs @@ -0,0 +1,104 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LINGYUN.Abp.MicroService.PlatformService.Migrations +{ + /// + public partial class AddBlobManagementModule : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Provider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp with time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp with time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ContainerId = table.Column(type: "uuid", nullable: false), + ParentId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Type = table.Column(type: "integer", nullable: false), + ContentType = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + Size = table.Column(type: "bigint", nullable: false), + ExpirationTime = table.Column(type: "timestamp with time zone", nullable: true), + Provider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + FullName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + DownloadCount = table.Column(type: "bigint", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp with time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp with time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobs_ParentId", + column: x => x.ParentId, + principalTable: "AbpBlobs", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ParentId", + table: "AbpBlobs", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_FullName", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "FullName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/PlatformServiceMigrationsDbContextModelSnapshot.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/PlatformServiceMigrationsDbContextModelSnapshot.cs index 7a696a9fa..b4bdf6049 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/PlatformServiceMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/Migrations/PlatformServiceMigrationsDbContextModelSnapshot.cs @@ -19,11 +19,150 @@ namespace LINGYUN.Abp.MicroService.PlatformService.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) - .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("ProductVersion", "10.0.2") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp with time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp with time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => { b.Property("Id") @@ -1243,6 +1382,19 @@ namespace LINGYUN.Abp.MicroService.PlatformService.Migrations b.ToTable("AppPlatformEnterprises", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => { b.HasOne("LINGYUN.Platform.Datas.Data", null) @@ -1299,6 +1451,11 @@ namespace LINGYUN.Abp.MicroService.PlatformService.Migrations b.Navigation("Package"); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => { b.Navigation("Items"); diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDataSeeder.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDataSeeder.cs index 8b2fab9c2..5a04f3954 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDataSeeder.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDataSeeder.cs @@ -1,5 +1,5 @@ -using LINGYUN.Abp.UI.Navigation; -using System.Collections.Generic; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.UI.Navigation; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -8,17 +8,17 @@ using Volo.Abp.MultiTenancy; namespace LINGYUN.Abp.MicroService.PlatformService; public class PlatformServiceDataSeeder : ITransientDependency { - protected IEnumerable NavigationSeedContributors { get; } - protected INavigationProvider NavigationProvider { get; } + protected NavigationDataSeeder NavigationDataSeeder { get; } + protected IBlobDataSeeder BlobDataSeeder { get; } protected ICurrentTenant CurrentTenant { get; } public PlatformServiceDataSeeder( - IEnumerable navigationSeedContributors, - INavigationProvider navigationProvider, - ICurrentTenant currentTenant) + NavigationDataSeeder navigationDataSeeder, + ICurrentTenant currentTenant, + IBlobDataSeeder blobDataSeeder) { - NavigationSeedContributors = navigationSeedContributors; - NavigationProvider = navigationProvider; + NavigationDataSeeder = navigationDataSeeder; CurrentTenant = currentTenant; + BlobDataSeeder = blobDataSeeder; } public async virtual Task SeedAsync(DataSeedContext context) @@ -26,22 +26,17 @@ public class PlatformServiceDataSeeder : ITransientDependency using (CurrentTenant.Change(context.TenantId)) { await SeedNavigationAsync(); + await SeedBlobContainerAsync(); } } private async Task SeedNavigationAsync() { - var menus = await NavigationProvider.GetAllAsync(); - - var multiTenancySides = CurrentTenant.IsAvailable - ? MultiTenancySides.Tenant - : MultiTenancySides.Host; - - var seedContext = new NavigationSeedContext(menus, multiTenancySides); + await NavigationDataSeeder.SeedAsync(CurrentTenant.Id); + } - foreach (var contributor in NavigationSeedContributors) - { - await contributor.SeedAsync(seedContext); - } + private async Task SeedBlobContainerAsync() + { + await BlobDataSeeder.SeedAsync(CurrentTenant.Id); } } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDbMigrationEventHandler.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDbMigrationEventHandler.cs index ce598345a..1c682e635 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDbMigrationEventHandler.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceDbMigrationEventHandler.cs @@ -39,17 +39,21 @@ public class PlatformServiceDbMigrationEventHandler : protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - // 新租户数据种子 - var context = new DataSeedContext(eventData.Id); - if (eventData.Properties != null) + using (CurrentTenant.Change(eventData.Id)) { - foreach (var property in eventData.Properties) + using (var uow = UnitOfWorkManager.Begin(requiresNew: true)) { - context.WithProperty(property.Key, property.Value); + var seedContext = new DataSeedContext(eventData.Id); + foreach (var prop in eventData.Properties) + { + seedContext.WithProperty(prop.Key, prop.Value); + } + + await DataSeeder.SeedAsync(seedContext); + + await uow.CompleteAsync(); } } - - await DataSeeder.SeedAsync(context); } public async virtual Task HandleEventAsync(TenantDeletedEto eventData) diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsDbContext.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsDbContext.cs index 67209d167..d0a20093d 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsDbContext.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsDbContext.cs @@ -1,4 +1,6 @@ -using LINGYUN.Platform.Datas; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; +using LINGYUN.Platform.Datas; using LINGYUN.Platform.EntityFrameworkCore; using LINGYUN.Platform.Layouts; using LINGYUN.Platform.Menus; @@ -14,7 +16,8 @@ namespace LINGYUN.Abp.MicroService.PlatformService; [ConnectionStringName("Default")] public class PlatformServiceMigrationsDbContext : AbpDbContext, - IPlatformDbContext + IPlatformDbContext, + IBlobManagementDbContext { public DbSet Menus { get; set; } @@ -40,6 +43,10 @@ public class PlatformServiceMigrationsDbContext : public DbSet SmsMessages { get; set; } + public DbSet BlobContainers { get; set; } + + public DbSet Blobs { get; set; } + public PlatformServiceMigrationsDbContext(DbContextOptions options) : base(options) { @@ -51,5 +58,6 @@ public class PlatformServiceMigrationsDbContext : base.OnModelCreating(modelBuilder); modelBuilder.ConfigurePlatform(); + modelBuilder.ConfigureBlobManagement(); } } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsEntityFrameworkCoreModule.cs index 507975d64..a37543069 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService.EntityFrameworkCore/PlatformServiceMigrationsEntityFrameworkCoreModule.cs @@ -1,4 +1,5 @@ -using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; +using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.UI.Navigation.VueVbenAdmin5; using LINGYUN.Platform.EntityFrameworkCore; @@ -16,6 +17,7 @@ namespace LINGYUN.Abp.MicroService.PlatformService; [DependsOn( typeof(AbpUINavigationVueVbenAdmin5Module), typeof(AbpSaasEntityFrameworkCoreModule), + typeof(AbpBlobManagementEntityFrameworkCoreModule), typeof(PlatformEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs similarity index 76% rename from aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs rename to aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs index c17321df2..33625a332 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs @@ -1,5 +1,5 @@ -using LINGYUN.Abp.MicroService.PlatformService.MultiTenancy; -using LINGYUN.Abp.OssManagement; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.MicroService.PlatformService.MultiTenancy; using Microsoft.Extensions.Options; using Volo.Abp.BackgroundWorkers; using Volo.Abp.DistributedLocking; @@ -8,16 +8,16 @@ using Volo.Abp.Threading; namespace LINGYUN.Abp.MicroService.PlatformService.BackgroundWorkers; -public class OssObjectTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorkerBase +public class BlobTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorkerBase { protected ICurrentTenant CurrentTenant { get; } protected IAbpDistributedLock DistributedLock { get; } protected ITenantConfigurationCache TenantConfigurationCache { get; } - public OssObjectTempCleanupBackgroundWorker( + public BlobTempCleanupBackgroundWorker( AbpAsyncTimer timer, IServiceScopeFactory serviceScopeFactory, - IOptionsMonitor cleanupOptions, + IOptionsMonitor cleanupOptions, IAbpDistributedLock distributedLock, ICurrentTenant currentTenant, ITenantConfigurationCache tenantConfigurationCache) @@ -31,9 +31,9 @@ public class OssObjectTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorke protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) { - await using var handle = await DistributedLock.TryAcquireAsync(nameof(OssObjectTempCleanupBackgroundWorker)); + await using var handle = await DistributedLock.TryAcquireAsync(nameof(BlobTempCleanupBackgroundWorker)); - Logger.LogInformation($"Lock is acquired for {nameof(OssObjectTempCleanupBackgroundWorker)}"); + Logger.LogInformation($"Lock is acquired for {nameof(BlobTempCleanupBackgroundWorker)}"); if (handle != null) { @@ -52,18 +52,18 @@ public class OssObjectTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorke } } - Logger.LogInformation($"Lock is released for {nameof(OssObjectTempCleanupBackgroundWorker)}"); + Logger.LogInformation($"Lock is released for {nameof(BlobTempCleanupBackgroundWorker)}"); return; } - Logger.LogInformation($"Handle is null because of the locking for : {nameof(OssObjectTempCleanupBackgroundWorker)}"); + Logger.LogInformation($"Handle is null because of the locking for : {nameof(BlobTempCleanupBackgroundWorker)}"); } private async static Task ExecuteCleanService(PeriodicBackgroundWorkerContext workerContext) { await workerContext .ServiceProvider - .GetRequiredService() + .GetRequiredService() .CleanAsync(); } } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Handlers/PrivateBlobProtecteder.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Handlers/PrivateBlobProtecteder.cs new file mode 100644 index 000000000..54c4049bb --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Handlers/PrivateBlobProtecteder.cs @@ -0,0 +1,76 @@ +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Users; + +namespace LINGYUN.Abp.MicroService.PlatformService.Handlers; + +public class PrivateBlobProtecteder : + ILocalEventHandler>, + ILocalEventHandler>, + ITransientDependency +{ + private readonly IResourcePermissionManager _resourcePermissionManager; + private readonly IBlobContainerRepository _blobContainerRepository; + private readonly ICurrentUser _currentUser; + + public PrivateBlobProtecteder( + IResourcePermissionManager resourcePermissionManager, + IBlobContainerRepository blobContainerRepository, + ICurrentUser currentUser) + { + _resourcePermissionManager = resourcePermissionManager; + _blobContainerRepository = blobContainerRepository; + _currentUser = currentUser; + } + + public async virtual Task HandleEventAsync(EntityCreatedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, true); + } + } + + public async virtual Task HandleEventAsync(EntityDeletedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, false); + } + } + + protected async virtual Task ShouldSetResourcePermissions(Blob blob) + { + if (!_currentUser.IsAuthenticated) + { + return false; + } + var blobContainer = await _blobContainerRepository.GetAsync(blob.ContainerId); + if (!string.Equals("users", blobContainer.Name, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + + return true; + } + + protected async virtual Task SetResourcePermissions(Blob blob, bool isGranted) + { + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.Delete, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.View, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj index a0eac7c99..a78d6306b 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/LINGYUN.Abp.MicroService.PlatformService.csproj @@ -36,6 +36,7 @@ + @@ -61,15 +62,13 @@ - - - - - - - - - + + + + + + + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.Configure.cs index 3516883a4..3713dc648 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.Configure.cs @@ -16,8 +16,9 @@ using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp.AspNetCore.ExceptionHandling; @@ -269,25 +270,18 @@ public partial class PlatformServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs index 0a5a0370f..640aa685b 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/PlatformServiceModule.cs @@ -3,6 +3,12 @@ using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Aliyun; +using LINGYUN.Abp.BlobManagement.FileSystem; +using LINGYUN.Abp.BlobManagement.Minio; +using LINGYUN.Abp.BlobManagement.Tencent; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.EventBus.CAP; @@ -13,14 +19,6 @@ using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.MicroService.PlatformService.BackgroundWorkers; using LINGYUN.Abp.Notifications; -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Aliyun; -using LINGYUN.Abp.OssManagement.FileSystem; -using LINGYUN.Abp.OssManagement.Imaging; -using LINGYUN.Abp.OssManagement.Minio; -using LINGYUN.Abp.OssManagement.Nexus; -using LINGYUN.Abp.OssManagement.SettingManagement; -using LINGYUN.Abp.OssManagement.Tencent; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; @@ -44,9 +42,9 @@ using Volo.Abp.Imaging; using Volo.Abp.MailKit; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; -using Volo.Abp.Threading; namespace LINGYUN.Abp.MicroService.PlatformService; @@ -57,15 +55,15 @@ namespace LINGYUN.Abp.MicroService.PlatformService; typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcLocalizationModule), - typeof(AbpOssManagementAliyunModule), // 阿里云存储提供者模块 - typeof(AbpOssManagementTencentModule), // 腾讯云存储提供者模块 - typeof(AbpOssManagementNexusModule), // Nexus存储提供者模块 - typeof(AbpOssManagementMinioModule), // Minio存储提供者模块 - typeof(AbpOssManagementFileSystemModule),// 本地文件系统提供者模块 - typeof(AbpOssManagementImagingModule), // 对象存储图形处理模块 - typeof(AbpOssManagementApplicationModule), - typeof(AbpOssManagementHttpApiModule), - typeof(AbpOssManagementSettingManagementModule), + + typeof(AbpBlobManagementApplicationModule), + typeof(AbpBlobManagementAliyunModule), + typeof(AbpBlobManagementFileSystemModule), + typeof(AbpBlobManagementMinioModule), + typeof(AbpBlobManagementTencentModule), + typeof(AbpBlobManagementHttpApiModule), + typeof(AbpBlobStoringBlobManagementModule), + typeof(AbpImagingImageSharpModule), typeof(PlatformApplicationModule), typeof(PlatformHttpApiModule), @@ -75,6 +73,7 @@ namespace LINGYUN.Abp.MicroService.PlatformService; typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpLocalizationManagementEntityFrameworkCoreModule), typeof(PlatformServiceMigrationsEntityFrameworkCoreModule), @@ -139,19 +138,18 @@ public partial class PlatformServiceModule : AbpModule ConfigurePlatformModule(context.Services); } - public override void OnApplicationInitialization(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(() => OnApplicationInitializationAsync(context)); - } - - public async override Task OnApplicationInitializationAsync(ApplicationInitializationContext context) + public async override Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) { - var options = context.ServiceProvider.GetRequiredService>().Value; + var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsCleanupEnabled) { await context.ServiceProvider .GetRequiredService() - .AddAsync(context.ServiceProvider.GetRequiredService()); + .AddAsync(context.ServiceProvider.GetRequiredService()); } + + await context.ServiceProvider + .GetRequiredService() + .SeedAsync(); } } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..ddf19cb69 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,40 @@ +using Microsoft.OpenApi; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs new file mode 100644 index 000000000..db9c69424 --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -0,0 +1,34 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters ??= new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/TenantHeaderParamter.cs deleted file mode 100644 index 8a2fe808d..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.PlatformService/TenantHeaderParamter.cs +++ /dev/null @@ -1,35 +0,0 @@ -using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.MicroService.PlatformService; - -public class TenantHeaderParamter : IOperationFilter -{ - private readonly AbpMultiTenancyOptions _multiTenancyOptions; - private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; - public TenantHeaderParamter( - IOptions multiTenancyOptions, - IOptions aspNetCoreMultiTenancyOptions) - { - _multiTenancyOptions = multiTenancyOptions.Value; - _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; - } - - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (_multiTenancyOptions.IsEnabled) - { - operation.Parameters = operation.Parameters ?? new List(); - operation.Parameters.Add(new OpenApiParameter - { - Name = _aspNetCoreMultiTenancyOptions.TenantKey, - In = ParameterLocation.Header, - Description = "Tenant Id/Name in http header", - Required = false - }); - } - } -} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj index 2c7326826..1f21f5504 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/LINGYUN.Abp.MicroService.TaskService.csproj @@ -60,11 +60,11 @@ - + - + diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs new file mode 100644 index 000000000..25809383e --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi; +using System.Collections.Generic; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters ??= new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.Configure.cs index c10f5235d..ac195cc58 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.Configure.cs @@ -9,24 +9,24 @@ using Medallion.Threading.Redis; using Microsoft.AspNetCore.Authentication.JwtBearer; using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.DataProtection; -using Microsoft.AspNetCore.Routing; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Identity.Client; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; -using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Auditing; +using Volo.Abp.BlobStoring; using Volo.Abp.Caching; using Volo.Abp.FeatureManagement; using Volo.Abp.GlobalFeatures; @@ -244,6 +244,13 @@ public partial class TaskServiceModule }); } + private void ConfigureBlobStoring(IConfiguration configuration) + { + Configure(options => + { + }); + } + private void ConfigureMvc(IServiceCollection services, IConfiguration configuration) { Configure(options => @@ -319,25 +326,18 @@ public partial class TaskServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs index 4933dbb3b..5a266fbaa 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TaskServiceModule.cs @@ -4,10 +4,10 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BackgroundTasks.DistributedLocking; -using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; using LINGYUN.Abp.BackgroundTasks.Jobs; using LINGYUN.Abp.BackgroundTasks.Notifications; using LINGYUN.Abp.BackgroundTasks.Quartz; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Elasticsearch.Jobs; @@ -16,7 +16,6 @@ using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; -using LINGYUN.Abp.OssManagement; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; @@ -51,7 +50,6 @@ namespace LINGYUN.Abp.MicroService.TaskService; typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAuthorizationOrganizationUnitsModule), typeof(AbpEmailingExceptionHandlingModule), - typeof(AbpOssManagementHttpApiClientModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcLocalizationModule), @@ -59,7 +57,6 @@ namespace LINGYUN.Abp.MicroService.TaskService; typeof(AbpBackgroundTasksJobsModule), typeof(AbpBackgroundTasksQuartzModule), typeof(AbpBackgroundTasksDistributedLockingModule), - typeof(AbpBackgroundTasksExceptionHandlingModule), typeof(AbpBackgroundTasksNotificationsModule), typeof(TaskManagementApplicationModule), typeof(TaskManagementHttpApiModule), @@ -70,6 +67,7 @@ namespace LINGYUN.Abp.MicroService.TaskService; typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpLocalizationManagementEntityFrameworkCoreModule), typeof(TaskServiceMigrationsEntityFrameworkCoreModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpDataDbMigratorModule), typeof(AbpCachingStackExchangeRedisModule), typeof(AbpEmailingPlatformModule), @@ -112,6 +110,7 @@ public partial class TaskServiceModule : AbpModule ConfigureCaching(configuration); ConfigureAuditing(configuration); ConfigureIdentity(configuration); + ConfigureBlobStoring(configuration); ConfigureMultiTenancy(configuration); ConfigureJsonSerializer(configuration); ConfigureMvc(context.Services, configuration); diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TenantHeaderParamter.cs deleted file mode 100644 index 3114d4324..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/TenantHeaderParamter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; -using System.Collections.Generic; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.MicroService.TaskService; - -public class TenantHeaderParamter : IOperationFilter -{ - private readonly AbpMultiTenancyOptions _multiTenancyOptions; - private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; - public TenantHeaderParamter( - IOptions multiTenancyOptions, - IOptions aspNetCoreMultiTenancyOptions) - { - _multiTenancyOptions = multiTenancyOptions.Value; - _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; - } - - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (_multiTenancyOptions.IsEnabled) - { - operation.Parameters = operation.Parameters ?? new List(); - operation.Parameters.Add(new OpenApiParameter - { - Name = _aspNetCoreMultiTenancyOptions.TenantKey, - In = ParameterLocation.Header, - Description = "Tenant Id/Name in http header", - Required = false - }); - } - } -} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/appsettings.Development.json index 29d04621d..c1a475ebb 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.TaskService/appsettings.Development.json @@ -51,8 +51,11 @@ "ConnectionStrings": { "Default": "Host=127.0.0.1;Database=abp;Username=postgres;Password=123456" }, + "BlobManagement": { + "ContainerName": "system" + }, "RemoteServices": { - "AbpOssManagement": { + "BlobManagement": { "BaseUrl": "http://localhost:30025", "IdentityClient": "InternalServiceClient", "UseCurrentAccessToken": false diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs new file mode 100644 index 000000000..25809383e --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi; +using System.Collections.Generic; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters ??= new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.Configure.cs index e449d229a..82fcc92ca 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WeChatService/WeChatServiceModule.Configure.cs @@ -13,10 +13,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -257,25 +259,18 @@ public partial class WeChatServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs new file mode 100644 index 000000000..25809383e --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi; +using System.Collections.Generic; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters ??= new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/TenantHeaderParamter.cs deleted file mode 100644 index 880e6d65a..000000000 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/TenantHeaderParamter.cs +++ /dev/null @@ -1,36 +0,0 @@ -using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; -using Swashbuckle.AspNetCore.SwaggerGen; -using System.Collections.Generic; -using Volo.Abp.AspNetCore.MultiTenancy; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.MicroService.WebhookService; - -public class TenantHeaderParamter : IOperationFilter -{ - private readonly AbpMultiTenancyOptions _multiTenancyOptions; - private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; - public TenantHeaderParamter( - IOptions multiTenancyOptions, - IOptions aspNetCoreMultiTenancyOptions) - { - _multiTenancyOptions = multiTenancyOptions.Value; - _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; - } - - public void Apply(OpenApiOperation operation, OperationFilterContext context) - { - if (_multiTenancyOptions.IsEnabled) - { - operation.Parameters = operation.Parameters ?? new List(); - operation.Parameters.Add(new OpenApiParameter - { - Name = _aspNetCoreMultiTenancyOptions.TenantKey, - In = ParameterLocation.Header, - Description = "Tenant Id/Name in http header", - Required = false - }); - } - } -} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.Configure.cs index ba99da581..e20ec7fd7 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WebhookService/WebhookServiceModule.Configure.cs @@ -18,11 +18,13 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -297,25 +299,18 @@ public partial class WebhookServiceModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj index 1dd555806..471107cdc 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/LINGYUN.Abp.MicroService.WorkflowService.csproj @@ -62,6 +62,7 @@
+ @@ -70,7 +71,6 @@ - diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs new file mode 100644 index 000000000..f7adfe64f --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/EnumDescriptionSchemaFilter.cs @@ -0,0 +1,41 @@ +using Microsoft.OpenApi; +using System; +using System.ComponentModel; +using System.Reflection; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +#nullable enable +public class EnumDescriptionSchemaFilter : ISchemaFilter +{ + public void Apply(IOpenApiSchema schema, SchemaFilterContext context) + { + if (context.Type.IsEnum) + { + var enumType = context.Type; + var enumValues = Enum.GetValues(enumType); + var underlyingType = Enum.GetUnderlyingType(enumType); + + var enumDesc = enumType.GetCustomAttribute()?.Description ?? enumType.Name; + schema.Description += $"{enumDesc}
"; + + schema.Description += "

Options:

    "; + + foreach (var value in enumValues) + { + string? description = default!; + var name = Enum.GetName(enumType, value); + if (name != null) + { + var memberInfo = enumType.GetMember(name)[0]; + description = memberInfo.GetCustomAttribute()?.Description ?? name; + } + var numericValue = Convert.ChangeType(value, underlyingType); + schema.Description += $"
  • {numericValue}: {name}({description ?? "No description."})
  • "; + } + + schema.Description += "
"; + } + } +} +#nullable disable diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs new file mode 100644 index 000000000..25809383e --- /dev/null +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/Swashbuckle/AspNetCore/SwaggerGen/TenantHeaderParamter.cs @@ -0,0 +1,35 @@ +using Microsoft.Extensions.Options; +using Microsoft.OpenApi; +using System.Collections.Generic; +using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; + +namespace Swashbuckle.AspNetCore.SwaggerGen; + +public class TenantHeaderParamter : IOperationFilter +{ + private readonly AbpMultiTenancyOptions _multiTenancyOptions; + private readonly AbpAspNetCoreMultiTenancyOptions _aspNetCoreMultiTenancyOptions; + public TenantHeaderParamter( + IOptions multiTenancyOptions, + IOptions aspNetCoreMultiTenancyOptions) + { + _multiTenancyOptions = multiTenancyOptions.Value; + _aspNetCoreMultiTenancyOptions = aspNetCoreMultiTenancyOptions.Value; + } + + public void Apply(OpenApiOperation operation, OperationFilterContext context) + { + if (_multiTenancyOptions.IsEnabled) + { + operation.Parameters ??= new List(); + operation.Parameters.Add(new OpenApiParameter + { + Name = _aspNetCoreMultiTenancyOptions.TenantKey, + In = ParameterLocation.Header, + Description = "Tenant Id in http header", + Required = false + }); + } + } +} diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs index 33a6e0fe7..686e785ad 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.Configure.cs @@ -3,7 +3,7 @@ using Elsa; using Elsa.Options; using Elsa.Rebus.RabbitMq; using LINGYUN.Abp.BackgroundTasks; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; @@ -17,11 +17,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -224,20 +226,6 @@ public partial class WorkflowServiceModule Configure(options => { preActions.Configure(options); - //options.Containers.Configure((containerConfiguration) => - //{ - // containerConfiguration.UseOssManagement(config => - // { - // config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket] ?? "workflow"; - // }); - //}); - options.Containers.ConfigureAll((_, containerConfiguration) => - { - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket] ?? "workflow"; - }); - }); }); } @@ -388,27 +376,33 @@ public partial class WorkflowServiceModule Url = new Uri("https://github.com/colinin/abp-next-admin/blob/master/LICENSE") } }); - options.DocInclusionPredicate((docName, description) => true); - options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DocInclusionPredicate((docName, description) => { + if (description.TryGetMethodInfo(out var methodInfo)) { - new OpenApiSecurityScheme + var controllerNamespace = methodInfo.DeclaringType?.Namespace; + if (controllerNamespace?.StartsWith("Elsa") == true) { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } + // TODO: Elsa 2.x 使用 Swashbuckle 6.x版本不兼容, 忽略Swagger文档 + return false; + } } + + return true; }); + options.CustomSchemaIds(type => type.FullName); + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) + { + options.IncludeXmlComments(xmlDocFile); + } + + options.SchemaFilter(); options.OperationFilter(); }); } diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs index ac581493a..a2dc5550b 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/WorkflowServiceModule.cs @@ -6,7 +6,7 @@ using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; using LINGYUN.Abp.BackgroundTasks.Quartz; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Elsa; @@ -52,7 +52,7 @@ namespace LINGYUN.Abp.MicroService.WorkflowService; typeof(AbpSerilogEnrichersUniqueIdModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreSerilogModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpElsaModule), typeof(AbpElsaServerModule), typeof(AbpElsaActivitiesModule), diff --git a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/appsettings.Development.json b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/appsettings.Development.json index 1732a9fef..d7b7c1a12 100644 --- a/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/appsettings.Development.json +++ b/aspnet-core/aspire/LINGYUN.Abp.MicroService.WorkflowService/appsettings.Development.json @@ -101,7 +101,7 @@ } }, "RemoteServices": { - "AbpOssManagement": { + "BlobManagement": { "BaseUrl": "http://localhost:30025", "IdentityClient": "InternalServiceClient", "UseCurrentAccessToken": false @@ -117,8 +117,8 @@ "ClientSecret": "1q2w3E*" } }, - "OssManagement": { - "Bucket": "workflow" + "BlobManagement": { + "ContainerName": "workflow" }, "DistributedLock": { "IsEnabled": true, diff --git a/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/OrganizationUnits/AbpAuthorizationOrganizationUnitsModule.cs b/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/OrganizationUnits/AbpAuthorizationOrganizationUnitsModule.cs index 62059d772..9cc771eac 100644 --- a/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/OrganizationUnits/AbpAuthorizationOrganizationUnitsModule.cs +++ b/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/OrganizationUnits/AbpAuthorizationOrganizationUnitsModule.cs @@ -13,6 +13,8 @@ public class AbpAuthorizationOrganizationUnitsModule : AbpModule Configure(options => { options.ValueProviders.Add(); + + options.ResourceValueProviders.Add(); }); } } diff --git a/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/Permissions/OrganizationUnitResourcePermissionValueProvider.cs b/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/Permissions/OrganizationUnitResourcePermissionValueProvider.cs new file mode 100644 index 000000000..b16037160 --- /dev/null +++ b/aspnet-core/framework/authorization/LINGYUN.Abp.Authorization.OrganizationUnits/LINGYUN/Abp/Authorization/Permissions/OrganizationUnitResourcePermissionValueProvider.cs @@ -0,0 +1,92 @@ +using LINGYUN.Abp.Authorization.OrganizationUnits; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Authorization.Permissions.Resources; + +namespace LINGYUN.Abp.Authorization.Permissions; + +public class OrganizationUnitResourcePermissionValueProvider : ResourcePermissionValueProvider +{ + public const string ProviderName = "O"; + public override string Name => ProviderName; + + public OrganizationUnitResourcePermissionValueProvider( + IResourcePermissionStore resourcePermissionStore) + : base(resourcePermissionStore) + { + } + + public async override Task CheckAsync(ResourcePermissionValueCheckContext context) + { + var organizationUnits = context.Principal?.FindAll(AbpOrganizationUnitClaimTypes.OrganizationUnit).Select(c => c.Value).ToArray(); + + if (organizationUnits == null || !organizationUnits.Any()) + { + return PermissionGrantResult.Undefined; + } + + foreach (var organizationUnit in organizationUnits.Distinct()) + { + if (await ResourcePermissionStore.IsGrantedAsync( + context.Permission.Name, + context.ResourceName, + context.ResourceKey, + Name, + organizationUnit)) + { + return PermissionGrantResult.Granted; + } + } + + return PermissionGrantResult.Undefined; + } + + public async override Task CheckAsync(ResourcePermissionValuesCheckContext context) + { + var permissionNames = context.Permissions.Select(x => x.Name).Distinct().ToList(); + Check.NotNullOrEmpty(permissionNames, nameof(permissionNames)); + + var result = new MultiplePermissionGrantResult(permissionNames.ToArray()); + + var organizationUnits = context.Principal?.FindAll(AbpOrganizationUnitClaimTypes.OrganizationUnit).Select(c => c.Value).ToArray(); + if (organizationUnits == null || !organizationUnits.Any()) + { + return result; + } + + foreach (var organizationUnit in organizationUnits.Distinct()) + { + var multipleResult = await ResourcePermissionStore.IsGrantedAsync( + permissionNames.ToArray(), + context.ResourceName, + context.ResourceKey, + Name, + organizationUnit); + + foreach (var grantResult in multipleResult.Result.Where(grantResult => + result.Result.ContainsKey(grantResult.Key) && + result.Result[grantResult.Key] == PermissionGrantResult.Undefined && + grantResult.Value != PermissionGrantResult.Undefined)) + { + result.Result[grantResult.Key] = grantResult.Value; + permissionNames.RemoveAll(x => x == grantResult.Key); + } + + if (result.AllGranted || result.AllProhibited) + { + break; + } + + if (permissionNames.IsNullOrEmpty()) + { + break; + } + } + + return result; + } +} diff --git a/aspnet-core/framework/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/AliyunClientFactory.cs b/aspnet-core/framework/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/AliyunClientFactory.cs index b271a583c..df800cb11 100644 --- a/aspnet-core/framework/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/AliyunClientFactory.cs +++ b/aspnet-core/framework/cloud-aliyun/LINGYUN.Abp.Aliyun/LINGYUN/Abp/Aliyun/AliyunClientFactory.cs @@ -99,16 +99,13 @@ public abstract class AliyunClientFactory /// /// 客户端类型 /// 客户端参数类型 -public abstract class AliyunClientFactory +public abstract class AliyunClientFactory : AliyunClientFactory { - protected ISettingProvider SettingProvider { get; } - protected IDistributedCache Cache { get; } public AliyunClientFactory( ISettingProvider settingProvider, IDistributedCache cache) + : base(settingProvider, cache) { - Cache = cache; - SettingProvider = settingProvider; } public async virtual Task CreateAsync(TConfiguration configuration) @@ -134,46 +131,4 @@ public abstract class AliyunClientFactory protected abstract TClient GetClient(TConfiguration configuration, string regionId, string accessKeyId, string accessKeySecret); protected abstract TClient GetSecurityTokenClient(TConfiguration configuration, string regionId, string accessKeyId, string accessKeySecret, string securityToken); - - protected async virtual Task GetCacheItemAsync(string accessKeyId, string accessKeySecret, string regionId) - { - var cacheItem = await Cache.GetAsync(AliyunBasicSessionCredentialsCacheItem.CacheKey); - if (cacheItem == null) - { - var roleArn = await SettingProvider.GetOrNullAsync(AliyunSettingNames.Authorization.RamRoleArn); - var roleSession = await SettingProvider.GetOrNullAsync(AliyunSettingNames.Authorization.RoleSessionName); - Check.NotNullOrWhiteSpace(roleArn, AliyunSettingNames.Authorization.RamRoleArn); - - var policy = await SettingProvider.GetOrNullAsync(AliyunSettingNames.Authorization.Policy); - var durationSeconds = await SettingProvider.GetAsync(AliyunSettingNames.Authorization.DurationSeconds, 3000); - - var profile = DefaultProfile.GetProfile(regionId, accessKeyId, accessKeySecret); - var request = new AssumeRoleRequest - { - AcceptFormat = FormatType.JSON, - RoleArn = roleArn, - RoleSessionName = roleSession, - DurationSeconds = durationSeconds, - Policy = policy.IsNullOrWhiteSpace() ? null : policy - }; - - var client = new DefaultAcsClient(profile); - var response = client.GetAcsResponse(request); - - cacheItem = new AliyunBasicSessionCredentialsCacheItem( - response.Credentials.AccessKeyId, - response.Credentials.AccessKeySecret, - response.Credentials.SecurityToken); - - await Cache.SetAsync( - AliyunBasicSessionCredentialsCacheItem.CacheKey, - cacheItem, - new DistributedCacheEntryOptions - { - AbsoluteExpirationRelativeToNow = TimeSpan.FromSeconds(durationSeconds - 10) - }); - } - - return cacheItem; - } } diff --git a/aspnet-core/framework/cloud-tencent/LINGYUN.Abp.BlobStoring.Tencent/LINGYUN/Abp/BlobStoring/Tencent/TencentBlobContainerConfigurationExtensions.cs b/aspnet-core/framework/cloud-tencent/LINGYUN.Abp.BlobStoring.Tencent/LINGYUN/Abp/BlobStoring/Tencent/TencentBlobContainerConfigurationExtensions.cs index 2edcc1844..f2e2e068c 100644 --- a/aspnet-core/framework/cloud-tencent/LINGYUN.Abp.BlobStoring.Tencent/LINGYUN/Abp/BlobStoring/Tencent/TencentBlobContainerConfigurationExtensions.cs +++ b/aspnet-core/framework/cloud-tencent/LINGYUN.Abp.BlobStoring.Tencent/LINGYUN/Abp/BlobStoring/Tencent/TencentBlobContainerConfigurationExtensions.cs @@ -13,11 +13,11 @@ public static class TencentBlobContainerConfigurationExtensions public static BlobContainerConfiguration UseTencentCloud( this BlobContainerConfiguration containerConfiguration, - Action aliyunConfigureAction) + Action tencentCloudConfigureAction) { containerConfiguration.ProviderType = typeof(TencentCloudBlobProvider); - aliyunConfigureAction(new TencentBlobProviderConfiguration(containerConfiguration)); + tencentCloudConfigureAction(new TencentBlobProviderConfiguration(containerConfiguration)); return containerConfiguration; } diff --git a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs index 7778511a8..901053d0c 100644 --- a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs +++ b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/AliyunBlobProviderConfiguration.cs @@ -1,5 +1,4 @@ using System.Collections.Generic; -using Volo.Abp; using Volo.Abp.BlobStoring; namespace LINGYUN.Abp.BlobStoring.Aliyun; @@ -12,7 +11,7 @@ public class AliyunBlobProviderConfiguration public string BucketName { get => _containerConfiguration.GetConfiguration(AliyunBlobProviderConfigurationNames.BucketName); - set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.BucketName, Check.NotNullOrWhiteSpace(value, nameof(value))); + set => _containerConfiguration.SetConfiguration(AliyunBlobProviderConfigurationNames.BucketName, value); } /// /// 命名空间不存在是否创建 diff --git a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs index 1b8d3ef54..6a4ccd6fa 100644 --- a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs +++ b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/IOssClientFactory.cs @@ -10,4 +10,10 @@ public interface IOssClientFactory /// /// Task CreateAsync(); + /// + /// 构建Oss客户端 + /// + /// + /// + Task CreateAsync(AliyunBlobProviderConfiguration configuration); } diff --git a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs index 5e505d999..9388454f0 100644 --- a/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs +++ b/aspnet-core/framework/common/LINGYUN.Abp.BlobStoring.Aliyun/LINGYUN/Abp/BlobStoring/Aliyun/OssClientFactory.cs @@ -6,7 +6,7 @@ using Volo.Abp.Settings; namespace LINGYUN.Abp.BlobStoring.Aliyun; -public class OssClientFactory : AliyunClientFactory, IOssClientFactory, ITransientDependency +public class OssClientFactory : AliyunClientFactory, IOssClientFactory, ITransientDependency { public OssClientFactory( ISettingProvider settingProvider, @@ -14,6 +14,7 @@ public class OssClientFactory : AliyunClientFactory, IOssClientFactory, IT : base(settingProvider, cache) { } + /// /// 普通方式构建Oss客户端 /// @@ -29,6 +30,22 @@ public class OssClientFactory : AliyunClientFactory, IOssClientFactory, IT accessKeySecret); } + /// + /// 普通方式构建Oss客户端 + /// + /// + /// + /// + /// + /// + protected override IOss GetClient(AliyunBlobProviderConfiguration configuration, string regionId, string accessKeyId, string accessKeySecret) + { + return new OssClient( + regionId, + accessKeyId, + accessKeySecret); + } + /// /// 通过用户安全令牌构建Oss客户端 /// @@ -45,4 +62,21 @@ public class OssClientFactory : AliyunClientFactory, IOssClientFactory, IT accessKeySecret, securityToken); } + /// + /// 通过用户安全令牌构建Oss客户端 + /// + /// + /// + /// + /// + /// + /// + protected override IOss GetSecurityTokenClient(AliyunBlobProviderConfiguration configuration, string regionId, string accessKeyId, string accessKeySecret, string securityToken) + { + return new OssClient( + regionId, + accessKeyId, + accessKeySecret, + securityToken); + } } diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xml b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xml rename to aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/FodyWeavers.xml diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xsd b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/FodyWeavers.xsd similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xsd rename to aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/FodyWeavers.xsd diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting.csproj similarity index 61% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj rename to aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting.csproj index 44934a4db..b7422a79a 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN.Abp.OssManagement.ImageSharp.csproj +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting.csproj @@ -5,20 +5,18 @@ net10.0 - LINGYUN.Abp.OssManagement.ImageSharp - LINGYUN.Abp.OssManagement.ImageSharp + LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting + LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting false false false + enable - - - - - + + diff --git a/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/ConnectionStrings/MicrotingMySQLConnectionStringChecker.cs b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/ConnectionStrings/MicrotingMySQLConnectionStringChecker.cs new file mode 100644 index 000000000..455909d29 --- /dev/null +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/ConnectionStrings/MicrotingMySQLConnectionStringChecker.cs @@ -0,0 +1,40 @@ +using MySqlConnector; +using System; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.EntityFrameworkCore.ConnectionStrings; + +[Dependency(ReplaceServices = true)] +public class MicrotingMySQLConnectionStringChecker : IConnectionStringChecker, ITransientDependency +{ + public virtual async Task CheckAsync(string connectionString) + { + var result = new AbpConnectionStringCheckResult(); + try + { + var connString = new MySqlConnectionStringBuilder(connectionString) + { + ConnectionLifeTime = 1 + }; + + var oldDatabaseName = connString.Database; + connString.Database = "mysql"; + + await using var conn = new MySqlConnection(connString.ConnectionString); + await conn.OpenAsync(); + result.Connected = true; + await conn.ChangeDatabaseAsync(oldDatabaseName); + result.DatabaseExists = true; + + await conn.CloseAsync(); + + return result; + } + catch (Exception) + { + return result; + } + } +} diff --git a/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/MySQL/AbpEntityFrameworkCoreMySQLMicrotingModule.cs b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/MySQL/AbpEntityFrameworkCoreMySQLMicrotingModule.cs new file mode 100644 index 000000000..b1fcb6274 --- /dev/null +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/LINGYUN/Abp/EntityFrameworkCore/MySQL/AbpEntityFrameworkCoreMySQLMicrotingModule.cs @@ -0,0 +1,28 @@ +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.GlobalFilters; +using Volo.Abp.Guids; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.EntityFrameworkCore.MySQL; + +[DependsOn( + typeof(AbpEntityFrameworkCoreModule) + )] +public class AbpEntityFrameworkCoreMySQLMicrotingModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + if (options.DefaultSequentialGuidType == null) + { + options.DefaultSequentialGuidType = SequentialGuidType.SequentialAsString; + } + }); + + Configure(options => + { + options.UseDbFunction = true; + }); + } +} diff --git a/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Microsoft/EntityFrameworkCore/AbpMicrotingMySQLModelBuilderExtensions.cs b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Microsoft/EntityFrameworkCore/AbpMicrotingMySQLModelBuilderExtensions.cs new file mode 100644 index 000000000..24f4a95af --- /dev/null +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Microsoft/EntityFrameworkCore/AbpMicrotingMySQLModelBuilderExtensions.cs @@ -0,0 +1,12 @@ +using Volo.Abp.EntityFrameworkCore; + +namespace Microsoft.EntityFrameworkCore; + +public static class AbpMicrotingMySQLModelBuilderExtensions +{ + public static void UseMySQL( + this ModelBuilder modelBuilder) + { + modelBuilder.SetDatabaseProvider(EfCoreDatabaseProvider.MySql); + } +} diff --git a/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs new file mode 100644 index 000000000..785acf504 --- /dev/null +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextConfigurationContextMySQLExtensions.cs @@ -0,0 +1,33 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore; +using System; +using Volo.Abp.EntityFrameworkCore.DependencyInjection; + +namespace Volo.Abp.EntityFrameworkCore; + +public static class AbpDbContextConfigurationContextMySQLExtensions +{ + public static DbContextOptionsBuilder UseMySQL( + [NotNull] this AbpDbContextConfigurationContext context, + Action? mySQLOptionsAction = null) + { + if (context.ExistingConnection != null) + { + return context.DbContextOptions.UseMySql(context.ExistingConnection, + ServerVersion.AutoDetect(context.ConnectionString), optionsBuilder => + { + optionsBuilder.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery); + mySQLOptionsAction?.Invoke(optionsBuilder); + }); + } + else + { + return context.DbContextOptions.UseMySql(context.ConnectionString, + ServerVersion.AutoDetect(context.ConnectionString), optionsBuilder => + { + optionsBuilder.UseQuerySplittingBehavior(QuerySplittingBehavior.SplitQuery); + mySQLOptionsAction?.Invoke(optionsBuilder); + }); + } + } +} \ No newline at end of file diff --git a/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs new file mode 100644 index 000000000..7b1ffacd5 --- /dev/null +++ b/aspnet-core/framework/efcore/LINGYUN.Abp.EntityFrameworkCore.MySQL.Microting/Volo/Abp/EntityFrameworkCore/AbpDbContextOptionsMySQLExtensions.cs @@ -0,0 +1,29 @@ +using JetBrains.Annotations; +using Microsoft.EntityFrameworkCore.Infrastructure; +using System; + +namespace Volo.Abp.EntityFrameworkCore; + +public static class AbpDbContextOptionsMySQLExtensions +{ + public static void UseMySQL( + [NotNull] this AbpDbContextOptions options, + Action? mySQLOptionsAction = null) + { + options.Configure(context => + { + context.UseMySQL(mySQLOptionsAction); + }); + } + + public static void UseMySQL( + [NotNull] this AbpDbContextOptions options, + Action? mySQLOptionsAction = null) + where TDbContext : AbpDbContext + { + options.Configure(context => + { + context.UseMySQL(mySQLOptionsAction); + }); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ExporterAppService.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ExporterAppService.cs index 2ccc95eb8..ca41e0629 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ExporterAppService.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ExporterAppService.cs @@ -8,9 +8,9 @@ namespace LINGYUN.Abp.Exporter; public abstract class ExporterAppService : ApplicationService, IExporterAppService where TEntityExportDto : class, new() { - private readonly IExporterProvider _exporterProvider; + private readonly IExcelExporterProvider _exporterProvider; - protected ExporterAppService(IExporterProvider exporterProvider) + protected ExporterAppService(IExcelExporterProvider exporterProvider) { _exporterProvider = exporterProvider; } diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ImporterAppService.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ImporterAppService.cs index 0e6735029..5e47c8aac 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ImporterAppService.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Application/LINGYUN/Abp/Exporter/ImporterAppService.cs @@ -8,8 +8,8 @@ namespace LINGYUN.Abp.Exporter; public abstract class ImporterAppService : ApplicationService, IImporterAppService where TEntityImportDto : class, new() { - private readonly IImporterProvider _importerProvider; - protected ImporterAppService(IImporterProvider importerProvider) + private readonly IExcelImporterProvider _importerProvider; + protected ImporterAppService(IExcelImporterProvider importerProvider) { _importerProvider = importerProvider; } diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelExporterProvider.cs new file mode 100644 index 000000000..0ba72bfe2 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelExporterProvider.cs @@ -0,0 +1,18 @@ +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.Exporter; +/// +/// Excel数据导出 +/// +public interface IExcelExporterProvider +{ + /// + /// 数据导出 + /// + /// 导出数据 + /// + /// + Task ExportAsync(object data, CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelImporterProvider.cs new file mode 100644 index 000000000..4e59a3598 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExcelImporterProvider.cs @@ -0,0 +1,18 @@ +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.Exporter; +/// +/// Excel数据导入提供者 +/// +public interface IExcelImporterProvider +{ + /// + /// 数据导入 + /// + /// + /// + /// + Task> ImportAsync(Stream stream) where T : class, new(); +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExporterProvider.cs index 0f31c7b70..2ff7d0ae0 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IExporterProvider.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -7,6 +8,7 @@ namespace LINGYUN.Abp.Exporter; /// /// 数据导出提供者 /// +[Obsolete("This interface will be deprecated in future versions. Please use IExcelExporterProvider instead.")] public interface IExporterProvider { /// diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IImporterProvider.cs index f1b0673dd..83a0b7346 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IImporterProvider.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Threading.Tasks; @@ -6,6 +7,7 @@ namespace LINGYUN.Abp.Exporter; /// /// 数据导入提供者 /// +[Obsolete("This interface will be deprecated in future versions. Please use IExcelImporterProvider instead.")] public interface IImporterProvider { /// diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IWordExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IWordExporterProvider.cs new file mode 100644 index 000000000..5046b20ad --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/IWordExporterProvider.cs @@ -0,0 +1,26 @@ +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.Exporter; +/// +/// Word数据导出 +/// +public interface IWordExporterProvider +{ + /// + /// 数据导出 + /// + /// 导出数据 + /// + /// + Task ExportAsync(object data, CancellationToken cancellationToken = default); + /// + /// 数据导出 + /// + /// 模板数据 + /// 导出数据 + /// + /// + Task ExportAsync(byte[] template, object data, CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelExporterProvider.cs new file mode 100644 index 000000000..d63b80924 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelExporterProvider.cs @@ -0,0 +1,17 @@ +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.Exporter; + +[Dependency(TryRegister = true)] +public class NullExcelExporterProvider : IExcelExporterProvider, ISingletonDependency +{ + private readonly static Stream _nullStreamCache = Stream.Null; + + public Task ExportAsync(object data, CancellationToken cancellationToken = default) + { + return Task.FromResult(_nullStreamCache); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelImporterProvider.cs new file mode 100644 index 000000000..14fce81ec --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExcelImporterProvider.cs @@ -0,0 +1,17 @@ +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.Exporter; + +public class NullExcelImporterProvider : IExcelImporterProvider, ISingletonDependency +{ + public Task> ImportAsync(Stream stream) where T : class, new() + { + IReadOnlyCollection empty = Array.Empty(); + + return Task.FromResult(empty); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExporterProvider.cs index 89457daf4..9b22fb28b 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullExporterProvider.cs @@ -1,4 +1,5 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; using System.IO; using System.Threading; using System.Threading.Tasks; @@ -6,6 +7,7 @@ using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter; +[Obsolete("This interface will be deprecated in future versions. Please use IExcelExporterProvider instead.")] [Dependency(TryRegister = true)] public class NullExporterProvider : IExporterProvider, ISingletonDependency { diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullImporterProvider.cs index 032428a4a..c145e8ee2 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullImporterProvider.cs @@ -7,6 +7,7 @@ using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter; [Dependency(TryRegister = true)] +[Obsolete("This interface will be deprecated in future versions. Please use IExcelImporterProvider instead.")] public class NullImporterProvider : IImporterProvider, ISingletonDependency { public Task> ImportAsync(Stream stream) where T : class, new() diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullWordExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullWordExporterProvider.cs new file mode 100644 index 000000000..af6cc807b --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.Core/LINGYUN/Abp/Exporter/NullWordExporterProvider.cs @@ -0,0 +1,22 @@ +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.Exporter; + +[Dependency(TryRegister = true)] +public class NullWordExporterProvider : IWordExporterProvider, ISingletonDependency +{ + private readonly static Stream _nullStreamCache = Stream.Null; + + public Task ExportAsync(object data, CancellationToken cancellationToken = default) + { + return Task.FromResult(_nullStreamCache); + } + + public Task ExportAsync(byte[] template, object data, CancellationToken cancellationToken = default) + { + return Task.FromResult(_nullStreamCache); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs index cae49824b..dd30f5e7e 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs @@ -1,5 +1,6 @@ using Magicodes.ExporterAndImporter.Excel.Utility; using Microsoft.Extensions.Options; +using System; using System.Collections.Generic; using System.IO; using System.Linq; @@ -8,7 +9,12 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MagicodesIE.Excel; -public class MagicodesIEExcelExporterProvider : IExporterProvider, ITransientDependency +public class MagicodesIEExcelExporterProvider : + IExcelExporterProvider, +#pragma warning disable CS0618 + IExporterProvider, +#pragma warning restore CS0618 + ITransientDependency { private readonly AbpExporterMagicodesIEExcelOptions _options; @@ -17,11 +23,41 @@ public class MagicodesIEExcelExporterProvider : IExporterProvider, ITransientDep _options = options.Value; } + public async virtual Task ExportAsync(object data, CancellationToken cancellationToken = default) + { + var dataType = data.GetType(); + + var collectionType = dataType.GetInterface(typeof(ICollection<>).Name); + if (collectionType != null) + { + var itemType = collectionType.GetGenericArguments()[0]; + + var exportMethod = GetType().GetMethod( + nameof(ExportAsync), + new[] { + typeof(ICollection<>).MakeGenericType(itemType), + typeof(CancellationToken) + }); + + if (exportMethod != null) + { + var genericMethod = exportMethod.MakeGenericMethod(itemType); + var result = genericMethod.Invoke(this, new[] { data, cancellationToken }); + + if (result is Task task) + { + return await task; + } + } + } + + throw new NotSupportedException($"Type {dataType.Name} is not supported. Expected ICollection."); + } + public async virtual Task ExportAsync(ICollection data, CancellationToken cancellationToken = default) where T : class, new() { var fileBytes = new List(); - var exportHelper = new ExportHelper(); // 由于Microsoft.IE.Excel官方此接口未暴露用户配置,做一次转换 diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs index e3b0e63d9..34c9e47c4 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs @@ -1,5 +1,4 @@ using Magicodes.ExporterAndImporter.Core.Models; -using Magicodes.ExporterAndImporter.Excel; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; @@ -13,21 +12,23 @@ using Volo.Abp.Json; namespace LINGYUN.Abp.Exporter.MagicodesIE.Excel; -public class MagicodesIEExcelImporterProvider : IImporterProvider, ITransientDependency +public class MagicodesIEExcelImporterProvider : + IExcelImporterProvider, +#pragma warning disable CS0618 + IImporterProvider, +#pragma warning restore CS0618 + ITransientDependency { public ILogger Logger { protected get; set; } private readonly AbpExporterMagicodesIEExcelOptions _options; private readonly IJsonSerializer _jsonSerializer; - private readonly IExcelImporter _excelImporter; public MagicodesIEExcelImporterProvider( IJsonSerializer jsonSerializer, - IExcelImporter excelImporter, IOptions options) { _jsonSerializer = jsonSerializer; - _excelImporter = excelImporter; _options = options.Value; Logger = NullLogger.Instance; diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs index 000e26636..413f8d8b3 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs @@ -1,9 +1,11 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; +using System; using Volo.Abp.Modularity; namespace LINGYUN.Abp.Exporter.MiniExcel; +[Obsolete("Use AbpExporterMiniSoftwareModule")] [DependsOn(typeof(AbpExporterCoreModule))] public class AbpExporterMiniExcelModule : AbpModule { diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xml b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xml rename to aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/FodyWeavers.xml diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xsd b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/FodyWeavers.xsd similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xsd rename to aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/FodyWeavers.xsd diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN.Abp.Exporter.MiniSoftware.csproj b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN.Abp.Exporter.MiniSoftware.csproj new file mode 100644 index 000000000..2ebd3df58 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN.Abp.Exporter.MiniSoftware.csproj @@ -0,0 +1,26 @@ + + + + + + + netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 + LINGYUN.Abp.Exporter.MiniSoftware + LINGYUN.Abp.Exporter.MiniSoftware + false + false + false + enable + + + + + + + + + + + + + diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniExcelOptions.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniExcelOptions.cs new file mode 100644 index 000000000..669451e59 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniExcelOptions.cs @@ -0,0 +1,26 @@ +using MiniExcelLibs.OpenXml; +using System; +using System.Collections.Generic; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; + +public class AbpExporterMiniExcelOptions +{ + public IDictionary> ExportSettingMapping { get; } + public IDictionary> ImportSettingMapping { get; } + public AbpExporterMiniExcelOptions() + { + ExportSettingMapping = new Dictionary>(); + ImportSettingMapping = new Dictionary>(); + } + + public void MapExportSetting(Type dataType, Action settingMapping) + { + ExportSettingMapping[dataType] = settingMapping; + } + + public void MapImportSetting(Type dataType, Action settingMapping) + { + ImportSettingMapping[dataType] = settingMapping; + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniSoftwareModule.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniSoftwareModule.cs new file mode 100644 index 000000000..a6d7623c4 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniSoftwareModule.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; + +[DependsOn(typeof(AbpExporterCoreModule))] +public class AbpExporterMiniSoftwareModule : AbpModule +{ +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniWordOptions.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniWordOptions.cs new file mode 100644 index 000000000..0f1b61bca --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/AbpExporterMiniWordOptions.cs @@ -0,0 +1,18 @@ +using System; +using System.Collections.Generic; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; + +public class AbpExporterMiniWordOptions +{ + public IDictionary ExportTemplateMapping { get; } + public AbpExporterMiniWordOptions() + { + ExportTemplateMapping = new Dictionary(); + } + + public void MapExportTemplate(Type dataType, string templateFilePath) + { + ExportTemplateMapping[dataType] = templateFilePath; + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs new file mode 100644 index 000000000..c7ae06be2 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs @@ -0,0 +1,62 @@ +using Microsoft.Extensions.Options; +using MiniExcelLibs; +using MiniExcelLibs.OpenXml; +using System; +using System.Collections.Generic; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; + +public class MiniExcelExporterProvider : + IExcelExporterProvider, +#pragma warning disable CS0618 + IExporterProvider, +#pragma warning restore CS0618 + ITransientDependency +{ + private readonly AbpExporterMiniExcelOptions _options; + + public MiniExcelExporterProvider(IOptions options) + { + _options = options.Value; + } + + public async virtual Task ExportAsync(object data, CancellationToken cancellationToken = default) + { + var dataType = data.GetType(); + if (dataType.IsGenericType) + { + dataType = dataType.GetGenericArguments()[0]; + } + return await ExportToExcelStreamAsync(dataType, data, cancellationToken); + } + + public async virtual Task ExportAsync(ICollection data, CancellationToken cancellationToken = default) where T : class, new() + { + return await ExportToExcelStreamAsync(typeof(T), data, cancellationToken); + } + + protected async virtual Task ExportToExcelStreamAsync(Type dataType, object data, CancellationToken cancellationToken = default) + { + var memoryStream = new MemoryStream(); + var xmlConfig = new OpenXmlConfiguration(); + + if (_options.ExportSettingMapping.TryGetValue(dataType, out var exportSetting)) + { + exportSetting?.Invoke(xmlConfig); + } + + await memoryStream.SaveAsAsync( + value: data, + excelType: ExcelType.XLSX, + configuration: xmlConfig, + cancellationToken: cancellationToken); + + memoryStream.Seek(0, SeekOrigin.Begin); + + return memoryStream; + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs new file mode 100644 index 000000000..1daf8a318 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs @@ -0,0 +1,40 @@ +using Microsoft.Extensions.Options; +using MiniExcelLibs; +using MiniExcelLibs.OpenXml; +using System.Collections.Generic; +using System.Collections.Immutable; +using System.IO; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; +public class MiniExcelImporterProvider : + IExcelImporterProvider, +#pragma warning disable CS0618 + IImporterProvider, +#pragma warning restore CS0618 + ITransientDependency +{ + private readonly AbpExporterMiniExcelOptions _options; + + public MiniExcelImporterProvider(IOptions options) + { + _options = options.Value; + } + + public async virtual Task> ImportAsync(Stream stream) where T : class, new() + { + var xmlConfig = new OpenXmlConfiguration(); + + if (_options.ExportSettingMapping.TryGetValue(typeof(T), out var exportSetting)) + { + exportSetting?.Invoke(xmlConfig); + } + + var dataList = await stream.QueryAsync( + excelType: ExcelType.XLSX, + configuration: xmlConfig); + + return dataList.ToImmutableList(); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniWordExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniWordExporterProvider.cs new file mode 100644 index 000000000..73bd74987 --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniWordExporterProvider.cs @@ -0,0 +1,73 @@ +using Microsoft.Extensions.Options; +using MiniSoftware; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.DependencyInjection; +using Volo.Abp.VirtualFileSystem; + +namespace LINGYUN.Abp.Exporter.MiniSoftware; + +public class MiniWordExporterProvider : IWordExporterProvider, ITransientDependency +{ + private readonly AbpExporterMiniWordOptions _exporterOptions; + private readonly IVirtualFileProvider _virtualFileProvider; + public MiniWordExporterProvider( + IVirtualFileProvider virtualFileProvider, + IOptions exporterOptions) + { + _virtualFileProvider = virtualFileProvider; + _exporterOptions = exporterOptions.Value; + } + + public async virtual Task ExportAsync(byte[] template, object data, CancellationToken cancellationToken = default) + { + var memoryStream = new MemoryStream(); + await memoryStream.SaveAsByTemplateAsync(template, data, cancellationToken); + memoryStream.Seek(0, SeekOrigin.Begin); + + return memoryStream; + } + + public async virtual Task ExportAsync(object data, CancellationToken cancellationToken = default) + { + var dataType = data.GetType(); + if (dataType.IsGenericType) + { + dataType = dataType.GetGenericArguments()[0]; + } + + if (!_exporterOptions.ExportTemplateMapping.TryGetValue(dataType, out var filePath)) + { + throw new AbpException($"No Word template file configuration of type {dataType} was found!"); + } + + byte[]? template = null; + if (File.Exists(filePath)) + { + using (var fs = File.OpenRead(filePath)) + { + template = await fs.GetAllBytesAsync(cancellationToken); + } + } + else + { + var templeFileInfo = _virtualFileProvider.GetFileInfo(filePath); + if (templeFileInfo.Exists) + { + using (var fs = templeFileInfo.CreateReadStream()) + { + template = await fs.GetAllBytesAsync(cancellationToken); + } + } + } + + if (template == null) + { + throw new AbpException($"The Word template file for the {dataType} type configuration {filePath} does not exist!"); + } + + return await ExportAsync(template, data, cancellationToken); + } +} diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/README.md b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/README.md new file mode 100644 index 000000000..dcebb7c8c --- /dev/null +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/README.md @@ -0,0 +1,46 @@ +# LINGYUN.Abp.Exporter.MiniSoftware + +数据导出接口的 [MiniExcel](https://github.com/mini-software/MiniExcel) 实现 + +MiniExcel简单、高效避免OOM的.NET处理Excel查、写、填充数据工具。 + +目前主流框架大多需要将数据全载入到内存方便操作,但这会导致内存消耗问题,MiniExcel 尝试以 Stream 角度写底层算法逻辑,能让原本1000多MB占用降低到几MB,避免内存不够情况。 + +详情请参考 [MiniExcel 文档](https://github.com/mini-software/MiniExcel/blob/master/README.md) + +## 配置使用 + + +```csharp + + [DependsOn( + typeof(AbpExporterMiniExcelModule) + )] + public class YouProjectModule : AbpModule + { + Configure(options => + { + // 配置类型数据导出 + options.MapExportSetting(typeof(DemoClass), config => + { + config.DynamicColumns = new[] + { + // 忽略Name字段 + new DynamicExcelColumn(nameof(DemoClass.Name)){ Ignore = true }, + // 其他配置 + }; + }); + }); + } + + public class DemoClass + { + public string Name { get; set; } + public string Remarks { get; set; } + + public DemoClass() + { + } + } +``` + diff --git a/aspnet-core/framework/features/LINGYUN.Abp.Features.Client/LINGYUN/Abp/Features/Client/ClientFeatureValueProvider.cs b/aspnet-core/framework/features/LINGYUN.Abp.Features.Client/LINGYUN/Abp/Features/Client/ClientFeatureValueProvider.cs index 380f7330e..bb53bb0fc 100644 --- a/aspnet-core/framework/features/LINGYUN.Abp.Features.Client/LINGYUN/Abp/Features/Client/ClientFeatureValueProvider.cs +++ b/aspnet-core/framework/features/LINGYUN.Abp.Features.Client/LINGYUN/Abp/Features/Client/ClientFeatureValueProvider.cs @@ -6,7 +6,7 @@ namespace LINGYUN.Abp.Features.Client; public class ClientFeatureValueProvider : FeatureValueProvider { - public const string ProviderName = "C"; + public const string ProviderName = "CT"; public override string Name => ProviderName; diff --git a/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs b/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs index 42e7d2fe1..21cb9d0ab 100644 --- a/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs +++ b/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeedContributor.cs @@ -1,64 +1,21 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; +using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; namespace LINGYUN.Abp.UI.Navigation; public class NavigationDataSeedContributor : IDataSeedContributor, ITransientDependency { - private readonly IServiceProvider _serviceProvider; - private readonly ICurrentTenant _currentTenant; - private readonly INavigationProvider _navigationProvider; - - private readonly AbpNavigationOptions _options; - - public List Contributors => _lazyContributors.Value; - private readonly Lazy> _lazyContributors; + private readonly NavigationDataSeeder _navigationDataSeeder; public NavigationDataSeedContributor( - IServiceProvider serviceProvider, - ICurrentTenant currentTenant, - INavigationProvider navigationProvider, - IOptions options) + NavigationDataSeeder navigationDataSeeder) { - _serviceProvider = serviceProvider; - _currentTenant = currentTenant; - _navigationProvider = navigationProvider; - - _options = options.Value; - _lazyContributors = new Lazy>(CreateContributors); + _navigationDataSeeder = navigationDataSeeder; } public async virtual Task SeedAsync(DataSeedContext context) { - using (_currentTenant.Change(context.TenantId)) - { - var menus = await _navigationProvider.GetAllAsync(); - - var multiTenancySides = _currentTenant.IsAvailable - ? MultiTenancySides.Tenant - : MultiTenancySides.Host; - - var seedContext = new NavigationSeedContext(menus, multiTenancySides); - - foreach (var contributor in Contributors) - { - await contributor.SeedAsync(seedContext); - } - } - } - - private List CreateContributors() - { - return _options - .NavigationSeedContributors - .Select(type => _serviceProvider.GetRequiredService(type) as INavigationSeedContributor) - .ToList(); + await _navigationDataSeeder.SeedAsync(context.TenantId); } } diff --git a/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeeder.cs b/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeeder.cs new file mode 100644 index 000000000..026a3cc38 --- /dev/null +++ b/aspnet-core/framework/navigation/LINGYUN.Abp.UI.Navigation/LINGYUN/Abp/UI/Navigation/NavigationDataSeeder.cs @@ -0,0 +1,73 @@ +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.UI.Navigation; + +public class NavigationDataSeeder : ITransientDependency +{ + public ILogger Logger { protected get; set; } + + private readonly IServiceProvider _serviceProvider; + private readonly ICurrentTenant _currentTenant; + private readonly INavigationProvider _navigationProvider; + + private readonly AbpNavigationOptions _options; + + public List Contributors => _lazyContributors.Value; + private readonly Lazy> _lazyContributors; + + public NavigationDataSeeder( + IServiceProvider serviceProvider, + ICurrentTenant currentTenant, + INavigationProvider navigationProvider, + IOptions options) + { + _serviceProvider = serviceProvider; + _currentTenant = currentTenant; + _navigationProvider = navigationProvider; + + _options = options.Value; + _lazyContributors = new Lazy>(CreateContributors); + + Logger = NullLogger.Instance; + } + + public async virtual Task SeedAsync(Guid? tenantId = null) + { + using (_currentTenant.Change(tenantId)) + { + Logger.LogInformation("Seeding the static navigations..."); + + var menus = await _navigationProvider.GetAllAsync(); + + var multiTenancySides = _currentTenant.IsAvailable + ? MultiTenancySides.Tenant + : MultiTenancySides.Host; + + var seedContext = new NavigationSeedContext(menus, multiTenancySides); + + foreach (var contributor in Contributors) + { + await contributor.SeedAsync(seedContext); + } + + Logger.LogInformation("Seeding the static navigations completed."); + } + } + + private List CreateContributors() + { + return _options + .NavigationSeedContributors + .Select(type => _serviceProvider.GetRequiredService(type) as INavigationSeedContributor) + .ToList(); + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/LY.MicroService.Applications.Single.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/LY.MicroService.Applications.Single.DbMigrator.csproj index 2a2277016..00460759f 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/LY.MicroService.Applications.Single.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/LY.MicroService.Applications.Single.DbMigrator.csproj @@ -10,6 +10,7 @@ + @@ -28,7 +29,6 @@ - diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/Program.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/Program.cs index f932d755a..3002584ad 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/Program.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/Program.cs @@ -1,5 +1,4 @@ -using Elsa.Activities.Compensation; -using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Hosting; using Microsoft.Extensions.Logging; diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/SingleDbMigratorModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/SingleDbMigratorModule.cs index 82617d59d..8e421dc2e 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/SingleDbMigratorModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.DbMigrator/SingleDbMigratorModule.cs @@ -1,5 +1,4 @@ -using LINGYUN.Abp.UI.Navigation.VueVbenAdmin5; -using LY.MicroService.Applications.Single.EntityFrameworkCore.MySql; +using LY.MicroService.Applications.Single.EntityFrameworkCore.MySql; using LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql; using LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer; using Microsoft.Extensions.DependencyInjection; @@ -10,7 +9,6 @@ namespace LY.MicroService.Applications.Single.DbMigrator; [DependsOn( typeof(AbpAutofacModule), - typeof(AbpUINavigationVueVbenAdmin5Module), typeof(SingleMigrationsEntityFrameworkCorePostgreSqlModule), typeof(SingleMigrationsEntityFrameworkCoreSqlServerModule), typeof(SingleMigrationsEntityFrameworkCoreMySqlModule) diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.csproj b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.csproj index 81d923389..3bf5897b7 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.csproj +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.csproj @@ -12,13 +12,12 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - - - + + diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.Designer.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.Designer.cs new file mode 100644 index 000000000..17bd49f96 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.Designer.cs @@ -0,0 +1,6137 @@ +// +using System; +using LY.MicroService.Applications.Single.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migrations +{ + [DbContext(typeof(SingleMigrationsDbContext))] + [Migration("20260421022905_Upgrade-Abp-Framework-To-10-2-0")] + partial class UpgradeAbpFrameworkTo1020 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("datetime(6)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("datetime(6)"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("ConversationId") + .HasColumnType("char(36)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("datetime(6)"); + + b.Property("ReplyMessage") + .HasColumnType("longtext"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("IsGlobal") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("float"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("int"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("PresencePenalty") + .HasColumnType("float"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Temperature") + .HasColumnType("float"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("char(36)"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("char(36)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("varchar(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("longtext"); + + b.Property("EntityTypeId") + .HasColumnType("char(36)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("longtext") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("longtext"); + + b.Property("EntityTypeId") + .HasColumnType("char(36)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("longtext") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("BirthDate") + .HasColumnType("datetime(6)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ShortBio") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Demo_Authors", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AuthorId") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Price") + .HasColumnType("float"); + + b.Property("PublishDate") + .HasColumnType("datetime(6)"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Demo_Books", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("EntityId") + .HasMaxLength(64) + .HasColumnType("char(64)") + .HasColumnName("EntityId"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("EntityType"); + + b.Property("OrganizationUnit") + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasColumnName("OrganizationUnit"); + + b.Property("Role") + .HasMaxLength(32) + .HasColumnType("varchar(32)") + .HasColumnName("Role"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("OrganizationUnit"); + + b.HasIndex("Role"); + + b.ToTable("Demo_BooksAuths", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("datetime(6)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasColumnName("CultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("TwoLetterISOLanguageName") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("TwoLetterISOLanguageName"); + + b.Property("UiCultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasColumnName("UiCultureName"); + + b.HasKey("Id"); + + b.HasIndex("CultureName"); + + b.ToTable("AbpLocalizationLanguages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DefaultCultureName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("DefaultCultureName"); + + b.Property("Description") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpLocalizationResources", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Text", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)") + .HasColumnName("CultureName"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Key"); + + b.Property("ResourceName") + .HasColumnType("longtext"); + + b.Property("Value") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("Key"); + + b.ToTable("AbpLocalizationTexts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("int"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Birthday") + .HasColumnType("datetime(6)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("datetime(6)"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("varchar(30)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("tinyint(1)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("DontDisturb") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("char(36)"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SpecialFocus") + .HasColumnType("tinyint(1)"); + + b.Property("Status") + .HasColumnType("tinyint unsigned"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("tinyint(1)"); + + b.Property("AllowAnonymous") + .HasColumnType("tinyint(1)"); + + b.Property("AllowReceiveMessage") + .HasColumnType("tinyint(1)"); + + b.Property("AllowSendMessage") + .HasColumnType("tinyint(1)"); + + b.Property("RequireAddFriendValition") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("char(36)"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("AdminUserId") + .HasColumnType("char(36)"); + + b.Property("AllowAnonymous") + .HasColumnType("tinyint(1)"); + + b.Property("AllowSendMessage") + .HasColumnType("tinyint(1)"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SilenceEnd") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Severity") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("tinyint(1)"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("int"); + + b.Property("NotificationType") + .HasColumnType("int"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name"); + + b.ToTable("AppUserSubscribes", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("datetime(6)"); + + b.Property("EditionId") + .HasColumnType("char(36)"); + + b.Property("EnableTime") + .HasColumnType("datetime(6)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("longtext") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Args") + .HasColumnType("longtext") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("datetime(6)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("varchar(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("IsAbandoned") + .HasColumnType("tinyint(1)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("JobType") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("datetime(6)"); + + b.Property("LockTimeOut") + .HasColumnType("int"); + + b.Property("MaxCount") + .HasColumnType("int"); + + b.Property("MaxTryCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("datetime(6)"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("int"); + + b.Property("TryCount") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("tinyint(1)"); + + b.Property("IsLayout") + .HasColumnType("tinyint(1)"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("varchar(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("RequiredFeatures") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhooks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("Data") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("Data"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.Property("WebhookName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("WebhookName"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksEvents", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhookGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("RequestHeaders") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("RequestHeaders"); + + b.Property("Response") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("Response"); + + b.Property("ResponseHeaders") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("ResponseHeaders"); + + b.Property("ResponseStatusCode") + .HasColumnType("int"); + + b.Property("SendExactSameData") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.Property("WebhookEventId") + .HasColumnType("char(36)"); + + b.Property("WebhookSubscriptionId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("WebhookEventId"); + + b.ToTable("AbpWebhooksSendAttempts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Description"); + + b.Property("Headers") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("Headers"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("Secret") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Secret"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.Property("TimeoutDuration") + .HasColumnType("int"); + + b.Property("WebhookUri") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("WebhookUri"); + + b.Property("Webhooks") + .HasMaxLength(2147483647) + .HasColumnType("longtext") + .HasColumnName("Webhooks"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksSubscriptions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("char(36)"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("char(36)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("char(36)"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("varchar(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("Startup") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("BodyTransferEncoding") + .HasColumnType("int"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("tinyint(1)"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("char(36)"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("varchar(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("datetime(6)"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("varchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("longtext"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("char(36)") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("char(36)") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("char(36)") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AuditLogId") + .HasColumnType("char(36)") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime(6)") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AuditLogId") + .HasColumnType("char(36)") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime(6)") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint unsigned") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("char(36)"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("EntityChangeId") + .HasColumnType("char(36)"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisibleToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("SourceTenantId") + .HasColumnType("char(36)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("TargetTenantId") + .HasColumnType("char(36)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("tinyint(1)") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.Property("LastAccessed") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("SignedIn") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("datetime(6)"); + + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("tinyint(1)"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("EndTime") + .HasColumnType("datetime(6)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("StartTime") + .HasColumnType("datetime(6)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("varchar(196)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("varchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("ClientSecret") + .HasColumnType("longtext"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ClientUri") + .HasColumnType("longtext"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("DisplayNames") + .HasColumnType("longtext"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("longtext"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("longtext"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("longtext"); + + b.Property("Permissions") + .HasColumnType("longtext"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("longtext"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("RedirectUris") + .HasColumnType("longtext"); + + b.Property("Requirements") + .HasColumnType("longtext"); + + b.Property("Settings") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApplicationId") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("Scopes") + .HasColumnType("longtext"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("varchar(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Descriptions") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("DisplayNames") + .HasColumnType("longtext"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("Resources") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApplicationId") + .HasColumnType("char(36)"); + + b.Property("AuthorizationId") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExpirationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("longtext"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("RedemptionDate") + .HasColumnType("datetime(6)"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("varchar(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("varchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("tinyint unsigned"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("tinyint(1)"); + + b.Property("IsInherited") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisibleToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.HasOne("LINGYUN.Abp.Demo.Authors.Author", null) + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.HasOne("LINGYUN.Abp.Demo.Books.Book", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.HasOne("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", "WebhookEvent") + .WithOne() + .HasForeignKey("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", "WebhookEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WebhookEvent"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.cs new file mode 100644 index 000000000..060629d76 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/20260421022905_Upgrade-Abp-Framework-To-10-2-0.cs @@ -0,0 +1,679 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1020 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "Type", + table: "OpenIddictTokens", + type: "varchar(150)", + maxLength: 150, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(50)", + oldMaxLength: 50, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "FrontChannelLogoutUri", + table: "OpenIddictApplications", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "EntityId", + table: "Demo_BooksAuths", + type: "char(64)", + maxLength: 64, + nullable: false, + collation: "ascii_general_ci", + oldClrType: typeof(string), + oldType: "char(64)", + oldMaxLength: 64) + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "datetime(6)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(256)", + maxLength: 256, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(64)", + oldMaxLength: 64, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(128)", + oldMaxLength: 128) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ManagementPermissionName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ResourceName", + table: "AbpPermissions", + type: "varchar(256)", + maxLength: 256, + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "varchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(64)", + oldMaxLength: 64) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "varchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(128)", + oldMaxLength: 128) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpAIAIToolDefinitionRecords", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Provider = table.Column(type: "varchar(20)", maxLength: 20, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Description = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + IsEnabled = table.Column(type: "tinyint(1)", nullable: false), + IsSystem = table.Column(type: "tinyint(1)", nullable: false), + IsGlobal = table.Column(type: "tinyint(1)", nullable: false), + StateCheckers = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAIAIToolDefinitionRecords", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpAIConversations", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(50)", maxLength: 50, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Workspace = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + ExpiredAt = table.Column(type: "datetime(6)", nullable: false), + UpdateAt = table.Column(type: "datetime(6)", nullable: true), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAIConversations", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpAITextChatMessages", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Content = table.Column(type: "varchar(1024)", maxLength: 1024, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Workspace = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Role = table.Column(type: "varchar(20)", maxLength: 20, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false), + UserId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ConversationId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ReplyMessage = table.Column(type: "longtext", nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ReplyAt = table.Column(type: "datetime(6)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAITextChatMessages", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpAITokenUsages", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + MessageId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ConversationId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + InputTokenCount = table.Column(type: "bigint", nullable: true), + OutputTokenCount = table.Column(type: "bigint", nullable: true), + TotalTokenCount = table.Column(type: "bigint", nullable: true), + CachedInputTokenCount = table.Column(type: "bigint", nullable: true), + ReasoningTokenCount = table.Column(type: "bigint", nullable: true), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAITokenUsages", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpAIWorkspaceDefinitions", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Provider = table.Column(type: "varchar(20)", maxLength: 20, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ModelName = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DisplayName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Description = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ApiKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ApiBaseUrl = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + SystemPrompt = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Instructions = table.Column(type: "varchar(512)", maxLength: 512, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Temperature = table.Column(type: "float", nullable: true), + MaxOutputTokens = table.Column(type: "int", nullable: true), + FrequencyPenalty = table.Column(type: "float", nullable: true), + PresencePenalty = table.Column(type: "float", nullable: true), + IsEnabled = table.Column(type: "tinyint(1)", nullable: false), + IsSystem = table.Column(type: "tinyint(1)", nullable: false), + Tools = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + StateCheckers = table.Column(type: "varchar(256)", maxLength: 256, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpAIWorkspaceDefinitions", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpResourcePermissionGrants", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ProviderName = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ProviderKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ResourceName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ResourceKey = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpResourcePermissionGrants", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "varbinary(1024)", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Data = table.Column(type: "json", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Password = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AppNotificationSendRecords", + columns: table => new + { + Id = table.Column(type: "bigint", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Provider = table.Column(type: "varchar(50)", maxLength: 50, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SendTime = table.Column(type: "datetime(6)", nullable: false), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + UserName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, defaultValue: "/") + .Annotation("MySql:CharSet", "utf8mb4"), + NotificationId = table.Column(type: "bigint", nullable: false), + NotificationName = table.Column(type: "varchar(255)", maxLength: 255, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + State = table.Column(type: "int", nullable: false), + Reason = table.Column(type: "varchar(255)", maxLength: 255, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AppNotificationSendRecords", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ContainerId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + ParentId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Type = table.Column(type: "int", nullable: false), + ContentType = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Size = table.Column(type: "bigint", nullable: false), + ExpirationTime = table.Column(type: "datetime(6)", nullable: true), + Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + FullName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DownloadCount = table.Column(type: "bigint", nullable: false), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobs_ParentId", + column: x => x.ParentId, + principalTable: "AbpBlobs", + principalColumn: "Id"); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions", + columns: new[] { "ResourceName", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpAIAIToolDefinitionRecords_Name", + table: "AbpAIAIToolDefinitionRecords", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpAITextChatMessages_TenantId_ConversationId", + table: "AbpAITextChatMessages", + columns: new[] { "TenantId", "ConversationId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAITokenUsages_TenantId_ConversationId", + table: "AbpAITokenUsages", + columns: new[] { "TenantId", "ConversationId" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpAIWorkspaceDefinitions_Name", + table: "AbpAIWorkspaceDefinitions", + column: "Name", + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ParentId", + table: "AbpBlobs", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_FullName", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "FullName" }); + + // TODO: Specified key was too long; max key length is 3072 bytes + // Fix: Remove Name + // TenantId: 36 × 4 = 144 + // Name: 128 × 4 = 512 + // ResourceName:256 × 4 = 1024 + // ResourceKey: 256 × 4 = 1024 + // ProviderName:64 × 4 = 256 + // ProviderKey: 64 × 4 = 256 + // = 3216 + //migrationBuilder.CreateIndex( + // name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_Resou~", + // table: "AbpResourcePermissionGrants", + // columns: new[] { "TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }, + // unique: true); + migrationBuilder.CreateIndex( + name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_Resou~", + table: "AbpResourcePermissionGrants", + columns: new[] { "TenantId", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Send_Notification_Name", + table: "AppNotificationSendRecords", + columns: new[] { "TenantId", "NotificationName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpAIAIToolDefinitionRecords"); + + migrationBuilder.DropTable( + name: "AbpAIConversations"); + + migrationBuilder.DropTable( + name: "AbpAITextChatMessages"); + + migrationBuilder.DropTable( + name: "AbpAITokenUsages"); + + migrationBuilder.DropTable( + name: "AbpAIWorkspaceDefinitions"); + + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpResourcePermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropTable( + name: "AppNotificationSendRecords"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "FrontChannelLogoutUri", + table: "OpenIddictApplications"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "ManagementPermissionName", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ResourceName", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "Type", + table: "OpenIddictTokens", + type: "varchar(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(150)", + oldMaxLength: 150, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "EntityId", + table: "Demo_BooksAuths", + type: "char(64)", + maxLength: 64, + nullable: false, + oldClrType: typeof(Guid), + oldType: "char(64)", + oldMaxLength: 64) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("Relational:Collation", "ascii_general_ci"); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(64)", + maxLength: 64, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(256)", + oldMaxLength: 256, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.UpdateData( + table: "AbpPermissions", + keyColumn: "GroupName", + keyValue: null, + column: "GroupName", + value: ""); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(128)", + oldMaxLength: 128, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "varchar(64)", + maxLength: 64, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(512)", + oldMaxLength: 512) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "varchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(512)", + oldMaxLength: 512) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/SingleMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/SingleMigrationsDbContextModelSnapshot.cs index f0b0a8e17..484c1f628 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/SingleMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/Migrations/SingleMigrationsDbContextModelSnapshot.cs @@ -19,15 +19,504 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "9.0.5") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("datetime(6)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("datetime(6)"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("ConversationId") + .HasColumnType("char(36)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("datetime(6)"); + + b.Property("ReplyMessage") + .HasColumnType("longtext"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("IsGlobal") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("float"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("IsSystem") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("int"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("PresencePenalty") + .HasColumnType("float"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Temperature") + .HasColumnType("float"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("char(36)"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -61,7 +550,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -101,7 +589,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -373,7 +860,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("BirthDate") @@ -439,7 +925,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AuthorId") @@ -540,7 +1025,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Data") @@ -567,7 +1051,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -602,7 +1085,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -659,7 +1141,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -1323,7 +1804,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AllowSubscriptionToClients") @@ -1354,7 +1834,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AllowSubscriptionToClients") @@ -1406,6 +1885,59 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.ToTable("AppNotificationDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => { b.Property("Id") @@ -1478,7 +2010,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -1541,7 +2072,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -1643,7 +2173,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -1893,7 +2422,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Content") @@ -1945,7 +2473,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -2009,7 +2536,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Description") @@ -2055,7 +2581,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -2094,7 +2619,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -2122,7 +2646,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -2233,7 +2756,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Code") @@ -2321,7 +2843,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AllowBeNull") @@ -2581,7 +3102,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -2672,7 +3192,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Code") @@ -2781,7 +3300,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -2826,7 +3344,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AliasName") @@ -2904,7 +3421,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -2946,7 +3462,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("BodyTransferEncoding") @@ -3116,7 +3631,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -3193,7 +3707,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Authors") @@ -3360,7 +3873,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Address") @@ -3463,7 +3975,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ApplicationName") @@ -3585,7 +4096,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AuditLogId") @@ -3635,7 +4145,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("CreationTime") @@ -3663,7 +4172,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AuditLogId") @@ -3688,8 +4196,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.Property("EntityTypeFullName") .IsRequired() - .HasMaxLength(128) - .HasColumnType("varchar(128)") + .HasMaxLength(512) + .HasColumnType("varchar(512)") .HasColumnName("EntityTypeFullName"); b.Property("ExtraProperties") @@ -3712,7 +4220,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("EntityChangeId") @@ -3736,8 +4243,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.Property("PropertyTypeFullName") .IsRequired() - .HasMaxLength(64) - .HasColumnType("varchar(64)") + .HasMaxLength(512) + .HasColumnType("varchar(512)") .HasColumnName("PropertyTypeFullName"); b.Property("TenantId") @@ -3754,7 +4261,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AllowedProviders") @@ -3815,7 +4321,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -3843,7 +4348,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Name") @@ -3875,7 +4379,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -3928,7 +4431,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("SourceTenantId") @@ -3954,7 +4456,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -4040,7 +4541,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Action") @@ -4117,7 +4617,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ClientId") @@ -4130,8 +4629,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasColumnType("varchar(64)"); b.Property("DeviceInfo") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); + .HasMaxLength(256) + .HasColumnType("varchar(256)"); b.Property("ExtraProperties") .HasColumnType("longtext") @@ -4173,7 +4672,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("AccessFailedCount") @@ -4252,6 +4750,15 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.Property("LastPasswordChangeTime") .HasColumnType("datetime(6)"); + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("tinyint(1)") @@ -4368,7 +4875,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("EndTime") @@ -4448,6 +4954,47 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -4495,7 +5042,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Code") @@ -4601,7 +5147,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ApplicationType") @@ -4660,6 +5205,9 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasColumnType("longtext") .HasColumnName("ExtraProperties"); + b.Property("FrontChannelLogoutUri") + .HasColumnType("longtext"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("tinyint(1)") @@ -4708,7 +5256,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ApplicationId") @@ -4757,7 +5304,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ConcurrencyStamp") @@ -4834,7 +5380,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("ApplicationId") @@ -4883,8 +5428,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasColumnType("varchar(400)"); b.Property("Type") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); + .HasMaxLength(150) + .HasColumnType("varchar(150)"); b.HasKey("Id"); @@ -4900,7 +5445,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -4913,13 +5457,16 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasColumnName("ExtraProperties"); b.Property("GroupName") - .IsRequired() .HasMaxLength(128) .HasColumnType("varchar(128)"); b.Property("IsEnabled") .HasColumnType("tinyint(1)"); + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + b.Property("MultiTenancySide") .HasColumnType("tinyint unsigned"); @@ -4936,6 +5483,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasMaxLength(128) .HasColumnType("varchar(128)"); + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + b.Property("StateCheckers") .HasMaxLength(256) .HasColumnType("varchar(256)"); @@ -4944,7 +5495,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.HasIndex("GroupName"); - b.HasIndex("Name") + b.HasIndex("ResourceName", "Name") .IsUnique(); b.ToTable("AbpPermissions", (string)null); @@ -4953,7 +5504,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Name") @@ -4986,7 +5536,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DisplayName") @@ -5011,10 +5560,51 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.ToTable("AbpPermissionGroups", (string)null); }); + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("Name") @@ -5046,7 +5636,6 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => { b.Property("Id") - .ValueGeneratedOnAdd() .HasColumnType("char(36)"); b.Property("DefaultValue") @@ -5092,6 +5681,19 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.ToTable("AbpSettingDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") @@ -5319,6 +5921,62 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -5383,6 +6041,11 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio .HasForeignKey("AuthorizationId"); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => { b.Navigation("Enums"); @@ -5452,6 +6115,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql.Migratio b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs index e33e55d9b..d9187af38 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.MySql/SingleMigrationsEntityFrameworkCoreMySqlModule.cs @@ -1,24 +1,22 @@ using DotNetCore.CAP; -using LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Quartz.MySqlInstaller; using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; -using Volo.Abp; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.Guids; using Volo.Abp.Modularity; namespace LY.MicroService.Applications.Single.EntityFrameworkCore.MySql; [DependsOn( - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), // Quartz MySql数据库初始化模块 typeof(AbpQuartzMySqlInstallerModule), // Elsa工作流模块 MySql集成 - typeof(AbpElsaEntityFrameworkCoreMySqlModule), + //typeof(AbpElsaEntityFrameworkCoreMySqlModule), typeof(SingleMigrationsEntityFrameworkCoreModule) )] public class SingleMigrationsEntityFrameworkCoreMySqlModule : AbpModule @@ -28,26 +26,19 @@ public class SingleMigrationsEntityFrameworkCoreMySqlModule : AbpModule var dbProvider = Environment.GetEnvironmentVariable("APPLICATION_DATABASE_PROVIDER"); if ("MySql".Equals(dbProvider, StringComparison.InvariantCultureIgnoreCase)) { - // TODO: MySQL EF 10提供商不可用,待完成后移除 - // See: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/2007 - throw new AbpInitializationException("MySQL EF 10 provider is unavailable. Please switch to another database infrastructure!") - { - HelpLink = "https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/2007", - }; - - //var configuration = context.Services.GetConfiguration(); + var configuration = context.Services.GetConfiguration(); - //PreConfigure(options => - //{ - // if (configuration.GetValue("CAP:IsEnabled")) - // { - // options.UseMySql( - // sqlOptions => - // { - // configuration.GetSection("CAP:MySql").Bind(sqlOptions); - // }); - // } - //}); + PreConfigure(options => + { + if (configuration.GetValue("CAP:IsEnabled")) + { + options.UseMySql( + sqlOptions => + { + configuration.GetSection("CAP:MySql").Bind(sqlOptions); + }); + } + }); } } public override void ConfigureServices(ServiceConfigurationContext context) @@ -61,9 +52,7 @@ public class SingleMigrationsEntityFrameworkCoreMySqlModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 -#pragma warning disable CS0618 - mysql.TranslateParameterizedCollectionsToConstants(); -#pragma warning restore CS0618 + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); mysql.MigrationsAssembly(GetType().Assembly); }); }); diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.csproj b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.csproj index 11886de44..b66d594ff 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.csproj +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.csproj @@ -21,7 +21,7 @@ - + diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.Designer.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.Designer.cs new file mode 100644 index 000000000..96d4c5a3b --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.Designer.cs @@ -0,0 +1,5980 @@ +// +using System; +using LY.MicroService.Applications.Single.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Migrations +{ + [DbContext(typeof(SingleMigrationsDbContext))] + [Migration("20260403035350_Upgrade-Abp-Framework-To-10-2-0")] + partial class UpgradeAbpFrameworkTo1020 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("timestamp without time zone"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("timestamp without time zone"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("ConversationId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("timestamp without time zone"); + + b.Property("ReplyMessage") + .HasColumnType("text"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("IsGlobal") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("real"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("integer"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("PresencePenalty") + .HasColumnType("real"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Temperature") + .HasColumnType("real"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("integer"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ShortBio") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Demo_Authors", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuthorId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("timestamp without time zone"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Demo_Books", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EntityId") + .HasMaxLength(64) + .HasColumnType("uuid") + .HasColumnName("EntityId"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityType"); + + b.Property("OrganizationUnit") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("OrganizationUnit"); + + b.Property("Role") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("Role"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("OrganizationUnit"); + + b.HasIndex("Role"); + + b.ToTable("Demo_BooksAuths", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Data") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("CultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("TwoLetterISOLanguageName") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("TwoLetterISOLanguageName"); + + b.Property("UiCultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("UiCultureName"); + + b.HasKey("Id"); + + b.HasIndex("CultureName"); + + b.ToTable("AbpLocalizationLanguages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DefaultCultureName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DefaultCultureName"); + + b.Property("Description") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpLocalizationResources", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Text", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("CultureName"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Key"); + + b.Property("ResourceName") + .HasColumnType("text"); + + b.Property("Value") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("Key"); + + b.ToTable("AbpLocalizationTexts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Birthday") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Sex") + .HasColumnType("integer"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("boolean"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("DontDisturb") + .HasColumnType("boolean"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("uuid"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SpecialFocus") + .HasColumnType("boolean"); + + b.Property("Status") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("boolean"); + + b.Property("AllowAnonymous") + .HasColumnType("boolean"); + + b.Property("AllowReceiveMessage") + .HasColumnType("boolean"); + + b.Property("AllowSendMessage") + .HasColumnType("boolean"); + + b.Property("RequireAddFriendValition") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("uuid"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("AdminUserId") + .HasColumnType("uuid"); + + b.Property("AllowAnonymous") + .HasColumnType("boolean"); + + b.Property("AllowSendMessage") + .HasColumnType("boolean"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SilenceEnd") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Severity") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("boolean"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("boolean"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("integer"); + + b.Property("NotificationType") + .HasColumnType("integer"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name"); + + b.ToTable("AppUserSubscribes", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("timestamp without time zone"); + + b.Property("EditionId") + .HasColumnType("uuid"); + + b.Property("EnableTime") + .HasColumnType("timestamp without time zone"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("text") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Args") + .HasColumnType("text") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("integer"); + + b.Property("IsAbandoned") + .HasColumnType("boolean"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("JobType") + .HasColumnType("integer"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("LockTimeOut") + .HasColumnType("integer"); + + b.Property("MaxCount") + .HasColumnType("integer"); + + b.Property("MaxTryCount") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("integer"); + + b.Property("TryCount") + .HasColumnType("integer"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("boolean"); + + b.Property("IsLayout") + .HasColumnType("boolean"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("RequiredFeatures") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhooks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Data") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Data"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("WebhookName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("WebhookName"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksEvents", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhookGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("RequestHeaders") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("RequestHeaders"); + + b.Property("Response") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Response"); + + b.Property("ResponseHeaders") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("ResponseHeaders"); + + b.Property("ResponseStatusCode") + .HasColumnType("integer"); + + b.Property("SendExactSameData") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("WebhookEventId") + .HasColumnType("uuid"); + + b.Property("WebhookSubscriptionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("WebhookEventId"); + + b.ToTable("AbpWebhooksSendAttempts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Description"); + + b.Property("Headers") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Headers"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("Secret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Secret"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("TimeoutDuration") + .HasColumnType("integer"); + + b.Property("WebhookUri") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("WebhookUri"); + + b.Property("Webhooks") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Webhooks"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksSubscriptions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("character varying(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BodyTransferEncoding") + .HasColumnType("integer"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("boolean"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("uuid"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("text"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uuid"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EntityChangeId") + .HasColumnType("uuid"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Required") + .HasColumnType("boolean"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("SourceTenantId") + .HasColumnType("uuid"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("TargetTenantId") + .HasColumnType("uuid"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("LastAccessed") + .HasColumnType("timestamp without time zone"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SignedIn") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("timestamp with time zone"); + + b.Property("LastSignInTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("boolean"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("bytea"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("ClientSecret") + .HasColumnType("text"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientUri") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("text"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("text"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("text"); + + b.Property("Permissions") + .HasColumnType("text"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedirectUris") + .HasColumnType("text"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Settings") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Descriptions") + .HasColumnType("text"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Resources") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("AuthorizationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("smallint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("boolean"); + + b.Property("IsInherited") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.HasOne("LINGYUN.Abp.Demo.Authors.Author", null) + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.HasOne("LINGYUN.Abp.Demo.Books.Book", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.HasOne("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", "WebhookEvent") + .WithOne() + .HasForeignKey("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", "WebhookEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WebhookEvent"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("jsonb"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.cs new file mode 100644 index 000000000..9083d5308 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260403035350_Upgrade-Abp-Framework-To-10-2-0.cs @@ -0,0 +1,221 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1020 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions"); + + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "timestamp with time zone", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "boolean", + nullable: false, + defaultValue: false); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: true, + oldClrType: typeof(string), + oldType: "character varying(128)", + oldMaxLength: 128); + + migrationBuilder.AddColumn( + name: "ManagementPermissionName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: true); + + migrationBuilder.AddColumn( + name: "ResourceName", + table: "AbpPermissions", + type: "character varying(256)", + maxLength: 256, + nullable: true); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "character varying(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(64)", + oldMaxLength: 64); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "character varying(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(128)", + oldMaxLength: 128); + + migrationBuilder.CreateTable( + name: "AbpResourcePermissionGrants", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ResourceName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + ResourceKey = table.Column(type: "character varying(256)", maxLength: 256, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpResourcePermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "bytea", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + UserId = table.Column(type: "uuid", nullable: false), + Data = table.Column(type: "jsonb", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "uuid", nullable: false), + Password = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + CreatedAt = table.Column(type: "timestamp with time zone", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions", + columns: new[] { "ResourceName", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_Reso~", + table: "AbpResourcePermissionGrants", + columns: new[] { "TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpResourcePermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "ManagementPermissionName", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ResourceName", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "character varying(128)", + maxLength: 128, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "character varying(128)", + oldMaxLength: 128, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "character varying(64)", + maxLength: 64, + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(512)", + oldMaxLength: 512); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "character varying(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "character varying(512)", + oldMaxLength: 512); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.Designer.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.Designer.cs new file mode 100644 index 000000000..8482ed6fe --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.Designer.cs @@ -0,0 +1,6137 @@ +// +using System; +using LY.MicroService.Applications.Single.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Migrations +{ + [DbContext(typeof(SingleMigrationsDbContext))] + [Migration("20260421023019_Add-Blob-Management-Module")] + partial class AddBlobManagementModule + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("timestamp without time zone"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("timestamp without time zone"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("ConversationId") + .HasColumnType("uuid"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("timestamp without time zone"); + + b.Property("ReplyMessage") + .HasColumnType("text"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("IsGlobal") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("real"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("IsSystem") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("integer"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("PresencePenalty") + .HasColumnType("real"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Temperature") + .HasColumnType("real"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("character varying(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("text"); + + b.Property("EntityTypeId") + .HasColumnType("uuid"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("text") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("integer"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("integer"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BirthDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ShortBio") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Demo_Authors", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuthorId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("timestamp without time zone"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Demo_Books", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EntityId") + .HasMaxLength(64) + .HasColumnType("uuid") + .HasColumnName("EntityId"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityType"); + + b.Property("OrganizationUnit") + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("OrganizationUnit"); + + b.Property("Role") + .HasMaxLength(32) + .HasColumnType("character varying(32)") + .HasColumnName("Role"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("OrganizationUnit"); + + b.HasIndex("Role"); + + b.ToTable("Demo_BooksAuths", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Data") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("timestamp without time zone"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("CultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("TwoLetterISOLanguageName") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("TwoLetterISOLanguageName"); + + b.Property("UiCultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("UiCultureName"); + + b.HasKey("Id"); + + b.HasIndex("CultureName"); + + b.ToTable("AbpLocalizationLanguages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DefaultCultureName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DefaultCultureName"); + + b.Property("Description") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpLocalizationResources", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Text", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)") + .HasColumnName("CultureName"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Key"); + + b.Property("ResourceName") + .HasColumnType("text"); + + b.Property("Value") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("Key"); + + b.ToTable("AbpLocalizationTexts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("integer"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Birthday") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Sex") + .HasColumnType("integer"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("character varying(30)"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("boolean"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("DontDisturb") + .HasColumnType("boolean"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("uuid"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SpecialFocus") + .HasColumnType("boolean"); + + b.Property("Status") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("boolean"); + + b.Property("AllowAnonymous") + .HasColumnType("boolean"); + + b.Property("AllowReceiveMessage") + .HasColumnType("boolean"); + + b.Property("AllowSendMessage") + .HasColumnType("boolean"); + + b.Property("RequireAddFriendValition") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("uuid"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("AdminUserId") + .HasColumnType("uuid"); + + b.Property("AllowAnonymous") + .HasColumnType("boolean"); + + b.Property("AllowSendMessage") + .HasColumnType("boolean"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("character varying(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("SilenceEnd") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("Severity") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("boolean"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("boolean"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("integer"); + + b.Property("NotificationType") + .HasColumnType("integer"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("State") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name"); + + b.ToTable("AppUserSubscribes", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("timestamp without time zone"); + + b.Property("EditionId") + .HasColumnType("uuid"); + + b.Property("EnableTime") + .HasColumnType("timestamp without time zone"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("text") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("text"); + + b.Property("Args") + .HasColumnType("text") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("character varying(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("integer"); + + b.Property("IsAbandoned") + .HasColumnType("boolean"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("JobType") + .HasColumnType("integer"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("LockTimeOut") + .HasColumnType("integer"); + + b.Property("MaxCount") + .HasColumnType("integer"); + + b.Property("MaxTryCount") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("integer"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("integer"); + + b.Property("TryCount") + .HasColumnType("integer"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("character varying(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("character varying(1048576)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("boolean"); + + b.Property("IsLayout") + .HasColumnType("boolean"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("RequiredFeatures") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhooks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Data") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Data"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("WebhookName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("WebhookName"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksEvents", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhookGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("RequestHeaders") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("RequestHeaders"); + + b.Property("Response") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Response"); + + b.Property("ResponseHeaders") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("ResponseHeaders"); + + b.Property("ResponseStatusCode") + .HasColumnType("integer"); + + b.Property("SendExactSameData") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("WebhookEventId") + .HasColumnType("uuid"); + + b.Property("WebhookSubscriptionId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("WebhookEventId"); + + b.ToTable("AbpWebhooksSendAttempts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Description"); + + b.Property("Headers") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Headers"); + + b.Property("IsActive") + .HasColumnType("boolean"); + + b.Property("Secret") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Secret"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.Property("TimeoutDuration") + .HasColumnType("integer"); + + b.Property("WebhookUri") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("WebhookUri"); + + b.Property("Webhooks") + .HasMaxLength(2147483647) + .HasColumnType("text") + .HasColumnName("Webhooks"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksSubscriptions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uuid"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uuid"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uuid"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("character varying(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uuid"); + + b.Property("Startup") + .HasColumnType("boolean"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("BodyTransferEncoding") + .HasColumnType("integer"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("boolean"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("boolean"); + + b.Property("Priority") + .HasColumnType("integer"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("uuid"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("text") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("integer"); + + b.Property("SendTime") + .HasColumnType("timestamp without time zone"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("integer"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("boolean"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("integer"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("character varying(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("uuid"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("timestamp without time zone"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("character varying(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("character varying(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("character varying(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("text"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("integer") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uuid") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uuid") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("integer") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("character varying(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AuditLogId") + .HasColumnType("uuid") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("smallint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uuid"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EntityChangeId") + .HasColumnType("uuid"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("character varying(512)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Required") + .HasColumnType("boolean"); + + b.Property("ValueType") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("SourceTenantId") + .HasColumnType("uuid"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("TargetTenantId") + .HasColumnType("uuid"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("boolean") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("boolean") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("boolean") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("character varying(96)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("LastAccessed") + .HasColumnType("timestamp without time zone"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("SignedIn") + .HasColumnType("timestamp without time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("boolean") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("timestamp with time zone"); + + b.Property("LastSignInTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("timestamp with time zone"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("character varying(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("boolean"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("character varying(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("EndTime") + .HasColumnType("timestamp without time zone"); + + b.Property("SourceUserId") + .HasColumnType("uuid"); + + b.Property("StartTime") + .HasColumnType("timestamp without time zone"); + + b.Property("TargetUserId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("character varying(196)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("bytea"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("text"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("character varying(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("integer"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uuid"); + + b.Property("RoleId") + .HasColumnType("uuid"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("ClientSecret") + .HasColumnType("text"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("ClientUri") + .HasColumnType("text"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("text"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("text"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("text"); + + b.Property("Permissions") + .HasColumnType("text"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedirectUris") + .HasColumnType("text"); + + b.Property("Requirements") + .HasColumnType("text"); + + b.Property("Settings") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Scopes") + .HasColumnType("text"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uuid") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("text"); + + b.Property("Descriptions") + .HasColumnType("text"); + + b.Property("DisplayName") + .HasColumnType("text"); + + b.Property("DisplayNames") + .HasColumnType("text"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("character varying(200)"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("Resources") + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ApplicationId") + .HasColumnType("uuid"); + + b.Property("AuthorizationId") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExpirationDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("text"); + + b.Property("Properties") + .HasColumnType("text"); + + b.Property("RedemptionDate") + .HasColumnType("timestamp without time zone"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("character varying(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("character varying(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("character varying(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("character varying(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("IsEnabled") + .HasColumnType("boolean"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("smallint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("character varying(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("character varying(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ExtraProperties") + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("boolean"); + + b.Property("IsInherited") + .HasColumnType("boolean"); + + b.Property("IsVisibleToClients") + .HasColumnType("boolean"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("character varying(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.HasOne("LINGYUN.Abp.Demo.Authors.Author", null) + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.HasOne("LINGYUN.Abp.Demo.Books.Book", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.HasOne("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", "WebhookEvent") + .WithOne() + .HasForeignKey("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", "WebhookEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WebhookEvent"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("jsonb"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.cs new file mode 100644 index 000000000..e90183118 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/20260421023019_Add-Blob-Management-Module.cs @@ -0,0 +1,104 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Migrations +{ + /// + public partial class AddBlobManagementModule : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(128)", maxLength: 128, nullable: false), + Provider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "uuid", nullable: false), + TenantId = table.Column(type: "uuid", nullable: true), + ContainerId = table.Column(type: "uuid", nullable: false), + ParentId = table.Column(type: "uuid", nullable: true), + Name = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + Type = table.Column(type: "integer", nullable: false), + ContentType = table.Column(type: "character varying(128)", maxLength: 128, nullable: true), + Size = table.Column(type: "bigint", nullable: false), + ExpirationTime = table.Column(type: "timestamp without time zone", nullable: true), + Provider = table.Column(type: "character varying(64)", maxLength: 64, nullable: false), + FullName = table.Column(type: "character varying(256)", maxLength: 256, nullable: false), + DownloadCount = table.Column(type: "bigint", nullable: false), + ExtraProperties = table.Column(type: "text", nullable: false), + ConcurrencyStamp = table.Column(type: "character varying(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "timestamp without time zone", nullable: false), + CreatorId = table.Column(type: "uuid", nullable: true), + LastModificationTime = table.Column(type: "timestamp without time zone", nullable: true), + LastModifierId = table.Column(type: "uuid", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobs_ParentId", + column: x => x.ParentId, + principalTable: "AbpBlobs", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ParentId", + table: "AbpBlobs", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_FullName", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "FullName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/SingleMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/SingleMigrationsDbContextModelSnapshot.cs index b86f03425..c925fb5f1 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/SingleMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/Migrations/SingleMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.PostgreSql) - .HasAnnotation("ProductVersion", "10.0.0") + .HasAnnotation("ProductVersion", "10.0.2") .HasAnnotation("Relational:MaxIdentifierLength", 63); NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); @@ -375,6 +375,145 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.ToTable("AbpAIWorkspaceDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uuid"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("timestamp without time zone"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ParentId") + .HasColumnType("uuid"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("integer"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("character varying(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uuid") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("text") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("timestamp without time zone") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uuid") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.Property("Id") @@ -4057,8 +4196,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.Property("EntityTypeFullName") .IsRequired() - .HasMaxLength(128) - .HasColumnType("character varying(128)") + .HasMaxLength(512) + .HasColumnType("character varying(512)") .HasColumnName("EntityTypeFullName"); b.Property("ExtraProperties") @@ -4104,8 +4243,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.Property("PropertyTypeFullName") .IsRequired() - .HasMaxLength(64) - .HasColumnType("character varying(64)") + .HasMaxLength(512) + .HasColumnType("character varying(512)") .HasColumnName("PropertyTypeFullName"); b.Property("TenantId") @@ -4611,6 +4750,15 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.Property("LastPasswordChangeTime") .HasColumnType("timestamp with time zone"); + b.Property("LastSignInTime") + .HasColumnType("timestamp with time zone"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("boolean") @@ -4806,6 +4954,47 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("bytea"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uuid"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uuid"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("CreatedAt") + .HasColumnType("timestamp with time zone"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -5268,13 +5457,16 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig .HasColumnName("ExtraProperties"); b.Property("GroupName") - .IsRequired() .HasMaxLength(128) .HasColumnType("character varying(128)"); b.Property("IsEnabled") .HasColumnType("boolean"); + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + b.Property("MultiTenancySide") .HasColumnType("smallint"); @@ -5291,6 +5483,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig .HasMaxLength(128) .HasColumnType("character varying(128)"); + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + b.Property("StateCheckers") .HasMaxLength(256) .HasColumnType("character varying(256)"); @@ -5299,7 +5495,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.HasIndex("GroupName"); - b.HasIndex("Name") + b.HasIndex("ResourceName", "Name") .IsUnique(); b.ToTable("AbpPermissions", (string)null); @@ -5364,6 +5560,48 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.ToTable("AbpPermissionGroups", (string)null); }); + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uuid"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("character varying(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("character varying(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("character varying(256)"); + + b.Property("TenantId") + .HasColumnType("uuid") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") @@ -5443,6 +5681,19 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.ToTable("AbpSettingDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") @@ -5670,6 +5921,62 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("jsonb"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -5734,6 +6041,11 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig .HasForeignKey("AuthorizationId"); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => { b.Navigation("Enums"); @@ -5803,6 +6115,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql.Mig b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/SingleMigrationsEntityFrameworkCorePostgreSqlModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/SingleMigrationsEntityFrameworkCorePostgreSqlModule.cs index bea816d63..576228f0a 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/SingleMigrationsEntityFrameworkCorePostgreSqlModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql/SingleMigrationsEntityFrameworkCorePostgreSqlModule.cs @@ -1,10 +1,8 @@ using DotNetCore.CAP; -using LINGYUN.Abp.Elsa.EntityFrameworkCore.PostgreSql; using LINGYUN.Abp.Quartz.PostgresSqlInstaller; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System; -using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.EntityFrameworkCore.PostgreSql; using Volo.Abp.Guids; @@ -15,7 +13,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql; [DependsOn( typeof(AbpEntityFrameworkCorePostgreSqlModule), typeof(AbpQuartzPostgresSqlInstallerModule), - typeof(AbpElsaEntityFrameworkCorePostgreSqlModule), + //typeof(AbpElsaEntityFrameworkCorePostgreSqlModule), typeof(SingleMigrationsEntityFrameworkCoreModule) )] public class SingleMigrationsEntityFrameworkCorePostgreSqlModule : AbpModule diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.csproj b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.csproj index 957d3ae21..a87e0ff1d 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.csproj +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.csproj @@ -17,7 +17,7 @@ - + diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.Designer.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.Designer.cs new file mode 100644 index 000000000..2df5e17c2 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.Designer.cs @@ -0,0 +1,5987 @@ +// +using System; +using LY.MicroService.Applications.Single.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migrations +{ + [DbContext(typeof(SingleMigrationsDbContext))] + [Migration("20260403035440_Upgrade-Abp-Framework-To-10-2-0")] + partial class UpgradeAbpFrameworkTo1020 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("datetime2"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("datetime2"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("ConversationId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("datetime2"); + + b.Property("ReplyMessage") + .HasColumnType("nvarchar(max)"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("IsGlobal") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("real"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("int"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("PresencePenalty") + .HasColumnType("real"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Temperature") + .HasColumnType("real"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("nvarchar(max)") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("nvarchar(max)") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BirthDate") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ShortBio") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Demo_Authors", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Demo_Books", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EntityId") + .HasMaxLength(64) + .HasColumnType("uniqueidentifier") + .HasColumnName("EntityId"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityType"); + + b.Property("OrganizationUnit") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("OrganizationUnit"); + + b.Property("Role") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)") + .HasColumnName("Role"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("OrganizationUnit"); + + b.HasIndex("Role"); + + b.ToTable("Demo_BooksAuths", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("CultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TwoLetterISOLanguageName") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("TwoLetterISOLanguageName"); + + b.Property("UiCultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("UiCultureName"); + + b.HasKey("Id"); + + b.HasIndex("CultureName"); + + b.ToTable("AbpLocalizationLanguages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DefaultCultureName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DefaultCultureName"); + + b.Property("Description") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpLocalizationResources", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Text", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("CultureName"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Key"); + + b.Property("ResourceName") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("Key"); + + b.ToTable("AbpLocalizationTexts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("int"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Birthday") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("datetime2"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("bit"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("DontDisturb") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SpecialFocus") + .HasColumnType("bit"); + + b.Property("Status") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("bit"); + + b.Property("AllowAnonymous") + .HasColumnType("bit"); + + b.Property("AllowReceiveMessage") + .HasColumnType("bit"); + + b.Property("AllowSendMessage") + .HasColumnType("bit"); + + b.Property("RequireAddFriendValition") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("AdminUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowAnonymous") + .HasColumnType("bit"); + + b.Property("AllowSendMessage") + .HasColumnType("bit"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SilenceEnd") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Severity") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("bit"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("bit"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("int"); + + b.Property("NotificationType") + .HasColumnType("int"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name") + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AppUserSubscribes", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("datetime2"); + + b.Property("EditionId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnableTime") + .HasColumnType("datetime2"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("nvarchar(max)") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Args") + .HasColumnType("nvarchar(max)") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("IsAbandoned") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("JobType") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("datetime2"); + + b.Property("LockTimeOut") + .HasColumnType("int"); + + b.Property("MaxCount") + .HasColumnType("int"); + + b.Property("MaxTryCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("datetime2"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("int"); + + b.Property("TryCount") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("bit"); + + b.Property("IsLayout") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("RequiredFeatures") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhooks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("Data") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Data"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("WebhookName"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksEvents", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhookGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("RequestHeaders") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("RequestHeaders"); + + b.Property("Response") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Response"); + + b.Property("ResponseHeaders") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("ResponseHeaders"); + + b.Property("ResponseStatusCode") + .HasColumnType("int"); + + b.Property("SendExactSameData") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookEventId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookSubscriptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("WebhookEventId"); + + b.ToTable("AbpWebhooksSendAttempts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Description"); + + b.Property("Headers") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Headers"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("Secret") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Secret"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TimeoutDuration") + .HasColumnType("int"); + + b.Property("WebhookUri") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("WebhookUri"); + + b.Property("Webhooks") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Webhooks"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksSubscriptions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uniqueidentifier"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("nvarchar(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("Startup") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BodyTransferEncoding") + .HasColumnType("int"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("bit"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("uniqueidentifier"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("datetime2"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("datetime2"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("bit"); + + b.Property("IsVisibleToClients") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.Property("LastAccessed") + .HasColumnType("datetime2"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("SignedIn") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("datetimeoffset"); + + b.Property("LastSignInTime") + .HasColumnType("datetimeoffset"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("bit"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("ClientSecret") + .HasColumnType("nvarchar(max)"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ClientUri") + .HasColumnType("nvarchar(max)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayNames") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(max)"); + + b.Property("Permissions") + .HasColumnType("nvarchar(max)"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("nvarchar(max)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("RedirectUris") + .HasColumnType("nvarchar(max)"); + + b.Property("Requirements") + .HasColumnType("nvarchar(max)"); + + b.Property("Settings") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Descriptions") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayNames") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Resources") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorizationId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ExpirationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("nvarchar(max)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("RedemptionDate") + .HasColumnType("datetime2"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("tinyint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique() + .HasFilter("[ResourceName] IS NOT NULL"); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("bit"); + + b.Property("IsInherited") + .HasColumnType("bit"); + + b.Property("IsVisibleToClients") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.HasOne("LINGYUN.Abp.Demo.Authors.Author", null) + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.HasOne("LINGYUN.Abp.Demo.Books.Book", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.HasOne("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", "WebhookEvent") + .WithOne() + .HasForeignKey("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", "WebhookEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WebhookEvent"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("nvarchar(max)"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.cs new file mode 100644 index 000000000..c6abed986 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260403035440_Upgrade-Abp-Framework-To-10-2-0.cs @@ -0,0 +1,223 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1020 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions"); + + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "datetimeoffset", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "bit", + nullable: false, + defaultValue: false); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "nvarchar(128)", + maxLength: 128, + nullable: true, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.AddColumn( + name: "ManagementPermissionName", + table: "AbpPermissions", + type: "nvarchar(128)", + maxLength: 128, + nullable: true); + + migrationBuilder.AddColumn( + name: "ResourceName", + table: "AbpPermissions", + type: "nvarchar(256)", + maxLength: 256, + nullable: true); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "nvarchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(64)", + oldMaxLength: 64); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "nvarchar(512)", + maxLength: 512, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128); + + migrationBuilder.CreateTable( + name: "AbpResourcePermissionGrants", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + ProviderName = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ProviderKey = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ResourceName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + ResourceKey = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpResourcePermissionGrants", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "varbinary(1024)", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + UserId = table.Column(type: "uniqueidentifier", nullable: false), + Data = table.Column(type: "nvarchar(max)", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "uniqueidentifier", nullable: false), + Password = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + CreatedAt = table.Column(type: "datetimeoffset", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions", + columns: new[] { "ResourceName", "Name" }, + unique: true, + filter: "[ResourceName] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_ResourceKey_ProviderName_ProviderKey", + table: "AbpResourcePermissionGrants", + columns: new[] { "TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }, + unique: true, + filter: "[TenantId] IS NOT NULL"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpResourcePermissionGrants"); + + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "ManagementPermissionName", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ResourceName", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + defaultValue: "", + oldClrType: typeof(string), + oldType: "nvarchar(128)", + oldMaxLength: 128, + oldNullable: true); + + migrationBuilder.AlterColumn( + name: "PropertyTypeFullName", + table: "AbpEntityPropertyChanges", + type: "nvarchar(64)", + maxLength: 64, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(512)", + oldMaxLength: 512); + + migrationBuilder.AlterColumn( + name: "EntityTypeFullName", + table: "AbpEntityChanges", + type: "nvarchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "nvarchar(512)", + oldMaxLength: 512); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.Designer.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.Designer.cs new file mode 100644 index 000000000..5dda81893 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.Designer.cs @@ -0,0 +1,6144 @@ +// +using System; +using LY.MicroService.Applications.Single.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migrations +{ + [DbContext(typeof(SingleMigrationsDbContext))] + [Migration("20260421023044_Add-Blob-Management-Module")] + partial class AddBlobManagementModule + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) + .HasAnnotation("ProductVersion", "10.0.2") + .HasAnnotation("Relational:MaxIdentifierLength", 128); + + SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.ConversationRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExpiredAt") + .HasColumnType("datetime2"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UpdateAt") + .HasColumnType("datetime2"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.ToTable("AbpAIConversations", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Chats.TextChatMessageRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("ConversationId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ReplyAt") + .HasColumnType("datetime2"); + + b.Property("ReplyMessage") + .HasColumnType("nvarchar(max)"); + + b.Property("Role") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Workspace") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITextChatMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tokens.TokenUsageRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CachedInputTokenCount") + .HasColumnType("bigint"); + + b.Property("ConversationId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("InputTokenCount") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("OutputTokenCount") + .HasColumnType("bigint"); + + b.Property("ReasoningTokenCount") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TotalTokenCount") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ConversationId"); + + b.ToTable("AbpAITokenUsages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Tools.AIToolDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("IsGlobal") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIAIToolDefinitionRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.AIManagement.Workspaces.WorkspaceDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApiBaseUrl") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ApiKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrequencyPenalty") + .HasColumnType("real"); + + b.Property("Instructions") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("IsSystem") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaxOutputTokens") + .HasColumnType("int"); + + b.Property("ModelName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("PresencePenalty") + .HasColumnType("real"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SystemPrompt") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Temperature") + .HasColumnType("real"); + + b.Property("Tools") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpAIWorkspaceDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("nvarchar(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("nvarchar(max)") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("nvarchar(max)"); + + b.Property("EntityTypeId") + .HasColumnType("uniqueidentifier"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("nvarchar(max)") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Authors.Author", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BirthDate") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ShortBio") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("Demo_Authors", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Price") + .HasColumnType("real"); + + b.Property("PublishDate") + .HasColumnType("datetime2"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("AuthorId"); + + b.ToTable("Demo_Books", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("EntityId") + .HasMaxLength(64) + .HasColumnType("uniqueidentifier") + .HasColumnName("EntityId"); + + b.Property("EntityType") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityType"); + + b.Property("OrganizationUnit") + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("OrganizationUnit"); + + b.Property("Role") + .HasMaxLength(32) + .HasColumnType("nvarchar(32)") + .HasColumnName("Role"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("EntityId"); + + b.HasIndex("OrganizationUnit"); + + b.HasIndex("Role"); + + b.ToTable("Demo_BooksAuths", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Data") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("datetime2"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Language", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("CultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TwoLetterISOLanguageName") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("TwoLetterISOLanguageName"); + + b.Property("UiCultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("UiCultureName"); + + b.HasKey("Id"); + + b.HasIndex("CultureName"); + + b.ToTable("AbpLocalizationLanguages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Resource", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DefaultCultureName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DefaultCultureName"); + + b.Property("Description") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("DisplayName"); + + b.Property("Enable") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AbpLocalizationResources", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.LocalizationManagement.Text", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CultureName") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)") + .HasColumnName("CultureName"); + + b.Property("Key") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Key"); + + b.Property("ResourceName") + .HasColumnType("nvarchar(max)"); + + b.Property("Value") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("Key"); + + b.ToTable("AbpLocalizationTexts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("int"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Birthday") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("datetime2"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("bit"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("DontDisturb") + .HasColumnType("bit"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("uniqueidentifier"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SpecialFocus") + .HasColumnType("bit"); + + b.Property("Status") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("bit"); + + b.Property("AllowAnonymous") + .HasColumnType("bit"); + + b.Property("AllowReceiveMessage") + .HasColumnType("bit"); + + b.Property("AllowSendMessage") + .HasColumnType("bit"); + + b.Property("RequireAddFriendValition") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("AdminUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowAnonymous") + .HasColumnType("bit"); + + b.Property("AllowSendMessage") + .HasColumnType("bit"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("nvarchar(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("SilenceEnd") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("Severity") + .HasColumnType("smallint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("bit"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("bit"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("int"); + + b.Property("NotificationType") + .HasColumnType("int"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name") + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AppUserSubscribes", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("datetime2"); + + b.Property("EditionId") + .HasColumnType("uniqueidentifier"); + + b.Property("EnableTime") + .HasColumnType("datetime2"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("nvarchar(max)") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("nvarchar(450)"); + + b.Property("Args") + .HasColumnType("nvarchar(max)") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("datetime2"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("IsAbandoned") + .HasColumnType("bit"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("JobType") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("datetime2"); + + b.Property("LockTimeOut") + .HasColumnType("int"); + + b.Property("MaxCount") + .HasColumnType("int"); + + b.Property("MaxTryCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("datetime2"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("int"); + + b.Property("TryCount") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("nvarchar(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("bit"); + + b.Property("IsLayout") + .HasColumnType("bit"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("RequiredFeatures") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhooks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("Data") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Data"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("WebhookName"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksEvents", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpWebhooksWebhookGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("RequestHeaders") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("RequestHeaders"); + + b.Property("Response") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Response"); + + b.Property("ResponseHeaders") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("ResponseHeaders"); + + b.Property("ResponseStatusCode") + .HasColumnType("int"); + + b.Property("SendExactSameData") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookEventId") + .HasColumnType("uniqueidentifier"); + + b.Property("WebhookSubscriptionId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("WebhookEventId"); + + b.ToTable("AbpWebhooksSendAttempts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSubscription", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Description"); + + b.Property("Headers") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Headers"); + + b.Property("IsActive") + .HasColumnType("bit"); + + b.Property("Secret") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Secret"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TimeoutDuration") + .HasColumnType("int"); + + b.Property("WebhookUri") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("WebhookUri"); + + b.Property("Webhooks") + .HasMaxLength(2147483647) + .HasColumnType("nvarchar(max)") + .HasColumnName("Webhooks"); + + b.HasKey("Id"); + + b.ToTable("AbpWebhooksSubscriptions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("uniqueidentifier"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("uniqueidentifier"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("uniqueidentifier"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("nvarchar(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("uniqueidentifier"); + + b.Property("Startup") + .HasColumnType("bit"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("BodyTransferEncoding") + .HasColumnType("int"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("bit"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("bit"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("uniqueidentifier"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime2"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("bit"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + SqlServerPropertyBuilderExtensions.UseIdentityColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("datetime2"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("uniqueidentifier"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("datetime2"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("nvarchar(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("nvarchar(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("nvarchar(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("datetime2"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)") + .HasColumnName("ApplicationName"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("BrowserInfo"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientId"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ClientIpAddress"); + + b.Property("ClientName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("ClientName"); + + b.Property("Comments") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Comments"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("CorrelationId"); + + b.Property("Exceptions") + .HasColumnType("nvarchar(max)"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("HttpMethod") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("HttpMethod"); + + b.Property("HttpStatusCode") + .HasColumnType("int") + .HasColumnName("HttpStatusCode"); + + b.Property("ImpersonatorTenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorTenantId"); + + b.Property("ImpersonatorTenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("ImpersonatorTenantName"); + + b.Property("ImpersonatorUserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("ImpersonatorUserId"); + + b.Property("ImpersonatorUserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ImpersonatorUserName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("TenantName"); + + b.Property("Url") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Url"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier") + .HasColumnName("UserId"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ExecutionTime"); + + b.HasIndex("TenantId", "UserId", "ExecutionTime"); + + b.ToTable("AbpAuditLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ExecutionDuration") + .HasColumnType("int") + .HasColumnName("ExecutionDuration"); + + b.Property("ExecutionTime") + .HasColumnType("datetime2") + .HasColumnName("ExecutionTime"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("MethodName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("MethodName"); + + b.Property("Parameters") + .HasMaxLength(2000) + .HasColumnType("nvarchar(2000)") + .HasColumnName("Parameters"); + + b.Property("ServiceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("ServiceName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "ServiceName", "MethodName", "ExecutionTime"); + + b.ToTable("AbpAuditLogActions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogExcelFile", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("FileName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("FileName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuditLogExcelFiles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AuditLogId") + .HasColumnType("uniqueidentifier") + .HasColumnName("AuditLogId"); + + b.Property("ChangeTime") + .HasColumnType("datetime2") + .HasColumnName("ChangeTime"); + + b.Property("ChangeType") + .HasColumnType("tinyint") + .HasColumnName("ChangeType"); + + b.Property("EntityId") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("EntityId"); + + b.Property("EntityTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("EntityTypeFullName"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("AuditLogId"); + + b.HasIndex("TenantId", "EntityTypeFullName", "EntityId"); + + b.ToTable("AbpEntityChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EntityChangeId") + .HasColumnType("uniqueidentifier"); + + b.Property("NewValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("NewValue"); + + b.Property("OriginalValue") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("OriginalValue"); + + b.Property("PropertyName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("PropertyName"); + + b.Property("PropertyTypeFullName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") + .HasColumnName("PropertyTypeFullName"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityChangeId"); + + b.ToTable("AbpEntityPropertyChanges", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("bit"); + + b.Property("IsVisibleToClients") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Required") + .HasColumnType("bit"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetTenantId") + .HasColumnType("uniqueidentifier"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique() + .HasFilter("[SourceTenantId] IS NOT NULL AND [TargetTenantId] IS NOT NULL"); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("bit") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("bit") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("bit") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("nvarchar(96)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.Property("LastAccessed") + .HasColumnType("datetime2"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("SignedIn") + .HasColumnType("datetime2"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("bit") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("datetimeoffset"); + + b.Property("LastSignInTime") + .HasColumnType("datetimeoffset"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetimeoffset"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("nvarchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("bit"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("EndTime") + .HasColumnType("datetime2"); + + b.Property("SourceUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("StartTime") + .HasColumnType("datetime2"); + + b.Property("TargetUserId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("nvarchar(196)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("nvarchar(max)"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("nvarchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("uniqueidentifier"); + + b.Property("RoleId") + .HasColumnType("uniqueidentifier"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("ClientSecret") + .HasColumnType("nvarchar(max)"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("ClientUri") + .HasColumnType("nvarchar(max)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayNames") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("nvarchar(max)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("nvarchar(max)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("nvarchar(max)"); + + b.Property("Permissions") + .HasColumnType("nvarchar(max)"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("nvarchar(max)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("RedirectUris") + .HasColumnType("nvarchar(max)"); + + b.Property("Requirements") + .HasColumnType("nvarchar(max)"); + + b.Property("Settings") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Scopes") + .HasColumnType("nvarchar(max)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("uniqueidentifier") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime2") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("nvarchar(max)"); + + b.Property("Descriptions") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayName") + .HasColumnType("nvarchar(max)"); + + b.Property("DisplayNames") + .HasColumnType("nvarchar(max)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("nvarchar(200)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("Resources") + .HasColumnType("nvarchar(max)"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ApplicationId") + .HasColumnType("uniqueidentifier"); + + b.Property("AuthorizationId") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime2"); + + b.Property("ExpirationDate") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("nvarchar(max)"); + + b.Property("Properties") + .HasColumnType("nvarchar(max)"); + + b.Property("RedemptionDate") + .HasColumnType("datetime2"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("nvarchar(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("nvarchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("nvarchar(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("nvarchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("bit"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("tinyint"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique() + .HasFilter("[ResourceName] IS NOT NULL"); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[ProviderName] IS NOT NULL AND [ProviderKey] IS NOT NULL"); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("nvarchar(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("bit"); + + b.Property("IsInherited") + .HasColumnType("bit"); + + b.Property("IsVisibleToClients") + .HasColumnType("bit"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("nvarchar(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.Book", b => + { + b.HasOne("LINGYUN.Abp.Demo.Authors.Author", null) + .WithMany() + .HasForeignKey("AuthorId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Demo.Books.BookAuth", b => + { + b.HasOne("LINGYUN.Abp.Demo.Books.Book", "Entity") + .WithMany() + .HasForeignKey("EntityId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Entity"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", b => + { + b.HasOne("LINGYUN.Abp.WebhooksManagement.WebhookEventRecord", "WebhookEvent") + .WithOne() + .HasForeignKey("LINGYUN.Abp.WebhooksManagement.WebhookSendRecord", "WebhookEventId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("WebhookEvent"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLogAction", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("Actions") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.AuditLog", null) + .WithMany("EntityChanges") + .HasForeignKey("AuditLogId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityPropertyChange", b => + { + b.HasOne("Volo.Abp.AuditLogging.EntityChange", null) + .WithMany("PropertyChanges") + .HasForeignKey("EntityChangeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("nvarchar(max)"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.AuditLog", b => + { + b.Navigation("Actions"); + + b.Navigation("EntityChanges"); + }); + + modelBuilder.Entity("Volo.Abp.AuditLogging.EntityChange", b => + { + b.Navigation("PropertyChanges"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.cs new file mode 100644 index 000000000..1ffe60b9b --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/20260421023044_Add-Blob-Management-Module.cs @@ -0,0 +1,104 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migrations +{ + /// + public partial class AddBlobManagementModule : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: false), + Provider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "uniqueidentifier", nullable: false), + TenantId = table.Column(type: "uniqueidentifier", nullable: true), + ContainerId = table.Column(type: "uniqueidentifier", nullable: false), + ParentId = table.Column(type: "uniqueidentifier", nullable: true), + Name = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + Type = table.Column(type: "int", nullable: false), + ContentType = table.Column(type: "nvarchar(128)", maxLength: 128, nullable: true), + Size = table.Column(type: "bigint", nullable: false), + ExpirationTime = table.Column(type: "datetime2", nullable: true), + Provider = table.Column(type: "nvarchar(64)", maxLength: 64, nullable: false), + FullName = table.Column(type: "nvarchar(256)", maxLength: 256, nullable: false), + DownloadCount = table.Column(type: "bigint", nullable: false), + ExtraProperties = table.Column(type: "nvarchar(max)", nullable: false), + ConcurrencyStamp = table.Column(type: "nvarchar(40)", maxLength: 40, nullable: false), + CreationTime = table.Column(type: "datetime2", nullable: false), + CreatorId = table.Column(type: "uniqueidentifier", nullable: true), + LastModificationTime = table.Column(type: "datetime2", nullable: true), + LastModifierId = table.Column(type: "uniqueidentifier", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobs_ParentId", + column: x => x.ParentId, + principalTable: "AbpBlobs", + principalColumn: "Id"); + }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ParentId", + table: "AbpBlobs", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_FullName", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "FullName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/SingleMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/SingleMigrationsDbContextModelSnapshot.cs index 48cfa35d9..c21ead038 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/SingleMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/Migrations/SingleMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.SqlServer) - .HasAnnotation("ProductVersion", "10.0.0") + .HasAnnotation("ProductVersion", "10.0.2") .HasAnnotation("Relational:MaxIdentifierLength", 128); SqlServerModelBuilderExtensions.UseIdentityColumns(modelBuilder); @@ -375,6 +375,145 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.ToTable("AbpAIWorkspaceDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("uniqueidentifier"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime2"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ParentId") + .HasColumnType("uniqueidentifier"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("nvarchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime2") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("uniqueidentifier") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("nvarchar(max)") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime2") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("uniqueidentifier") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.Property("Id") @@ -4058,8 +4197,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.Property("EntityTypeFullName") .IsRequired() - .HasMaxLength(128) - .HasColumnType("nvarchar(128)") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") .HasColumnName("EntityTypeFullName"); b.Property("ExtraProperties") @@ -4105,8 +4244,8 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.Property("PropertyTypeFullName") .IsRequired() - .HasMaxLength(64) - .HasColumnType("nvarchar(64)") + .HasMaxLength(512) + .HasColumnType("nvarchar(512)") .HasColumnName("PropertyTypeFullName"); b.Property("TenantId") @@ -4614,6 +4753,15 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.Property("LastPasswordChangeTime") .HasColumnType("datetimeoffset"); + b.Property("LastSignInTime") + .HasColumnType("datetimeoffset"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("bit") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("bit") @@ -4809,6 +4957,47 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("uniqueidentifier"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetimeoffset"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -5271,13 +5460,16 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr .HasColumnName("ExtraProperties"); b.Property("GroupName") - .IsRequired() .HasMaxLength(128) .HasColumnType("nvarchar(128)"); b.Property("IsEnabled") .HasColumnType("bit"); + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + b.Property("MultiTenancySide") .HasColumnType("tinyint"); @@ -5294,6 +5486,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr .HasMaxLength(128) .HasColumnType("nvarchar(128)"); + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + b.Property("StateCheckers") .HasMaxLength(256) .HasColumnType("nvarchar(256)"); @@ -5302,8 +5498,9 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.HasIndex("GroupName"); - b.HasIndex("Name") - .IsUnique(); + b.HasIndex("ResourceName", "Name") + .IsUnique() + .HasFilter("[ResourceName] IS NOT NULL"); b.ToTable("AbpPermissions", (string)null); }); @@ -5368,6 +5565,49 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.ToTable("AbpPermissionGroups", (string)null); }); + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .HasColumnType("uniqueidentifier"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("nvarchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("nvarchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("nvarchar(256)"); + + b.Property("TenantId") + .HasColumnType("uniqueidentifier") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique() + .HasFilter("[TenantId] IS NOT NULL"); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") @@ -5448,6 +5688,19 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.ToTable("AbpSettingDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => { b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") @@ -5675,6 +5928,62 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("nvarchar(max)"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -5739,6 +6048,11 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr .HasForeignKey("AuthorizationId"); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => { b.Navigation("Enums"); @@ -5808,6 +6122,10 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer.Migr b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/SingleMigrationsEntityFrameworkCoreSqlServerModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/SingleMigrationsEntityFrameworkCoreSqlServerModule.cs index 133994a8c..1d72af19d 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/SingleMigrationsEntityFrameworkCoreSqlServerModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer/SingleMigrationsEntityFrameworkCoreSqlServerModule.cs @@ -1,6 +1,4 @@ -// using LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer; using DotNetCore.CAP; -using LINGYUN.Abp.Elsa.EntityFrameworkCore.SqlServer; using LINGYUN.Abp.Quartz.SqlServerInstaller; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -18,7 +16,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer; // Quartz SqlServerÊý¾ݿâ³õʼ»¯ģ¿é typeof(AbpQuartzSqlServerInstallerModule), // Elsa¹¤×÷Á÷ģ¿é SqlServer¼¯³É - typeof(AbpElsaEntityFrameworkCoreSqlServerModule), + //typeof(AbpElsaEntityFrameworkCoreSqlServerModule), typeof(SingleMigrationsEntityFrameworkCoreModule) )] public class SingleMigrationsEntityFrameworkCoreSqlServerModule : AbpModule diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/BlobDataSeedContributor.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/BlobDataSeedContributor.cs new file mode 100644 index 000000000..012de8495 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/BlobDataSeedContributor.cs @@ -0,0 +1,20 @@ +using LINGYUN.Abp.BlobManagement; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; + +namespace LY.MicroService.Applications.Single.EntityFrameworkCore.DataSeeder; + +public class BlobDataSeedContributor : IDataSeedContributor, ITransientDependency +{ + protected IBlobDataSeeder BlobDataSeeder { get; } + public BlobDataSeedContributor(IBlobDataSeeder blobDataSeeder) + { + BlobDataSeeder = blobDataSeeder; + } + + public async virtual Task SeedAsync(DataSeedContext context) + { + await BlobDataSeeder.SeedAsync(context.TenantId); + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/RolePermissionDataSeedContributor.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/RolePermissionDataSeedContributor.cs index ef4bbc1c5..b932958d3 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/RolePermissionDataSeedContributor.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/DataSeeder/RolePermissionDataSeedContributor.cs @@ -1,10 +1,10 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using System.Linq; using System.Threading.Tasks; using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; +using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; @@ -34,22 +34,21 @@ public class RolePermissionDataSeedContributor : IDataSeedContributor, ITransien { using (CurrentTenant.Change(context.TenantId)) { - Logger.LogInformation("Seeding the new tenant admin role permissions..."); - - var definitionPermissions = await PermissionDefinitionManager.GetPermissionsAsync(); - await PermissionDataSeeder.SeedAsync( - RolePermissionValueProvider.ProviderName, - "admin", - definitionPermissions.Select(x => x.Name), - context.TenantId); + Logger.LogInformation("Seeding the Users role permissions..."); + // 所有用户都应该具有查询用户权限, 用于IM场景 await PermissionDataSeeder.SeedAsync( RolePermissionValueProvider.ProviderName, "Users", - new string[] { "Platform.Feedback.Create" }, - context.TenantId); - - Logger.LogInformation("Seeding new tenant admin role permissions completed."); + new string[] + { + IdentityPermissions.UserLookup.Default, + IdentityPermissions.Users.Default, + "Platform.Feedback.Create" + }, + tenantId: context.TenantId); + + Logger.LogInformation("Seeding Users role permissions completed."); } } } diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/LY.MicroService.Applications.Single.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/LY.MicroService.Applications.Single.EntityFrameworkCore.csproj index 45cfc057f..198810412 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/LY.MicroService.Applications.Single.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/LY.MicroService.Applications.Single.EntityFrameworkCore.csproj @@ -25,12 +25,14 @@ + + diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleDbMigrationEventHandler.cs index 33e3be976..5fa401278 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleDbMigrationEventHandler.cs @@ -1,27 +1,19 @@ using LINGYUN.Abp.BackgroundTasks; using LINGYUN.Abp.BackgroundTasks.Internal; using LINGYUN.Abp.Saas.Tenants; -using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System; using System.Collections.Generic; using System.Threading.Tasks; -using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore.Migrations; using Volo.Abp.EventBus.Distributed; -using Volo.Abp.Guids; -using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; -using Volo.Abp.PermissionManagement; using Volo.Abp.Uow; -using IdentityRole = Volo.Abp.Identity.IdentityRole; -using IdentityUser = Volo.Abp.Identity.IdentityUser; - namespace LY.MicroService.Applications.Single.EntityFrameworkCore; public class SingleDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase, @@ -30,10 +22,7 @@ public class SingleDbMigrationEventHandler : protected AbpBackgroundTasksOptions Options { get; } protected IJobStore JobStore { get; } protected IJobScheduler JobScheduler { get; } - protected IGuidGenerator GuidGenerator { get; } - protected IdentityUserManager IdentityUserManager { get; } - protected IdentityRoleManager IdentityRoleManager { get; } - protected IPermissionDataSeeder PermissionDataSeeder { get; } + protected IDataSeeder DataSeeder { get; } public SingleDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -42,10 +31,7 @@ public class SingleDbMigrationEventHandler : IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - IGuidGenerator guidGenerator, - IdentityUserManager identityUserManager, - IdentityRoleManager identityRoleManager, - IPermissionDataSeeder permissionDataSeeder, + IDataSeeder dataSeeder, IJobStore jobStore, IJobScheduler jobScheduler, IOptions options) @@ -53,14 +39,12 @@ public class SingleDbMigrationEventHandler : ConnectionStringNameAttribute.GetConnStringName(), currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { - GuidGenerator = guidGenerator; - IdentityUserManager = identityUserManager; - IdentityRoleManager = identityRoleManager; - PermissionDataSeeder = permissionDataSeeder; + DataSeeder = dataSeeder; JobStore = jobStore; JobScheduler = jobScheduler; Options = options.Value; } + public async virtual Task HandleEventAsync(EntityDeletedEto eventData) { // 租户删除时移除轮询作业 @@ -81,10 +65,20 @@ public class SingleDbMigrationEventHandler : { using (CurrentTenant.Change(eventData.Id)) { - await QueueBackgroundJobAsync(eventData); + using (var uow = UnitOfWorkManager.Begin(requiresNew: true)) + { + await QueueBackgroundJobAsync(eventData); + + var seedContext = new DataSeedContext(eventData.Id); + foreach (var prop in eventData.Properties) + { + seedContext.WithProperty(prop.Key, prop.Value); + } - await SeedTenantDefaultRoleAsync(eventData); - // await SeedTenantAdminAsync(eventData); + await DataSeeder.SeedAsync(seedContext); + + await uow.CompleteAsync(); + } } } @@ -167,75 +161,4 @@ public class SingleDbMigrationEventHandler : Type = typeof(BackgroundCheckingJob).AssemblyQualifiedName, }; } - - protected async virtual Task SeedTenantDefaultRoleAsync(TenantCreatedEto eventData) - { - // 默认用户 - var roleId = GuidGenerator.Create(); - var defaultRole = new IdentityRole(roleId, "Users", eventData.Id) - { - IsStatic = true, - IsPublic = true, - IsDefault = true, - }; - (await IdentityRoleManager.CreateAsync(defaultRole)).CheckErrors(); - - // 所有用户都应该具有查询用户权限, 用于IM场景 - await PermissionDataSeeder.SeedAsync( - RolePermissionValueProvider.ProviderName, - defaultRole.Name, - new string[] - { - IdentityPermissions.UserLookup.Default, - IdentityPermissions.Users.Default - }, - tenantId: eventData.Id); - } - - protected async virtual Task SeedTenantAdminAsync(TenantCreatedEto eventData) - { - const string tenantAdminUserName = "admin"; - const string tenantAdminRoleName = "admin"; - Guid tenantAdminRoleId; - if (!await IdentityRoleManager.RoleExistsAsync(tenantAdminRoleName)) - { - tenantAdminRoleId = GuidGenerator.Create(); - var tenantAdminRole = new IdentityRole(tenantAdminRoleId, tenantAdminRoleName, eventData.Id) - { - IsStatic = true, - IsPublic = true - }; - (await IdentityRoleManager.CreateAsync(tenantAdminRole)).CheckErrors(); - } - else - { - var tenantAdminRole = await IdentityRoleManager.FindByNameAsync(tenantAdminRoleName); - tenantAdminRoleId = tenantAdminRole.Id; - } - - var adminUserId = GuidGenerator.Create(); - if (eventData.Properties.TryGetValue("AdminUserId", out var userIdString) && - Guid.TryParse(userIdString, out var adminUserGuid)) - { - adminUserId = adminUserGuid; - } - var adminEmailAddress = eventData.Properties.GetOrDefault("AdminEmail") ?? "admin@abp.io"; - var adminPassword = eventData.Properties.GetOrDefault("AdminPassword") ?? "1q2w3E*"; - - var tenantAdminUser = await IdentityUserManager.FindByNameAsync(adminEmailAddress); - if (tenantAdminUser == null) - { - tenantAdminUser = new IdentityUser( - adminUserId, - tenantAdminUserName, - adminEmailAddress, - eventData.Id); - - tenantAdminUser.AddRole(tenantAdminRoleId); - - // 创建租户管理用户 - (await IdentityUserManager.CreateAsync(tenantAdminUser)).CheckErrors(); - (await IdentityUserManager.AddPasswordAsync(tenantAdminUser, adminPassword)).CheckErrors(); - } - } } diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsDbContext.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsDbContext.cs index f56749701..c9616a840 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsDbContext.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsDbContext.cs @@ -3,6 +3,8 @@ using LINGYUN.Abp.AIManagement.EntityFrameworkCore; using LINGYUN.Abp.AIManagement.Tokens; using LINGYUN.Abp.AIManagement.Tools; using LINGYUN.Abp.AIManagement.Workspaces; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; using LINGYUN.Abp.DataProtectionManagement; using LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore; using LINGYUN.Abp.Demo.Authors; @@ -55,25 +57,26 @@ using Volo.Abp.SettingManagement.EntityFrameworkCore; namespace LY.MicroService.Applications.Single.EntityFrameworkCore; -[ReplaceDbContext(typeof(IAuditLoggingDbContext))] -[ReplaceDbContext(typeof(IIdentityDbContext))] -[ReplaceDbContext(typeof(IOpenIddictDbContext))] -[ReplaceDbContext(typeof(ISaasDbContext))] -[ReplaceDbContext(typeof(IFeatureManagementDbContext))] -[ReplaceDbContext(typeof(ISettingManagementDbContext))] -[ReplaceDbContext(typeof(IPermissionManagementDbContext))] -[ReplaceDbContext(typeof(ITextTemplatingDbContext))] -[ReplaceDbContext(typeof(ITaskManagementDbContext))] -[ReplaceDbContext(typeof(IWebhooksManagementDbContext))] -[ReplaceDbContext(typeof(IPlatformDbContext))] -[ReplaceDbContext(typeof(ILocalizationDbContext))] -[ReplaceDbContext(typeof(INotificationsDbContext))] -[ReplaceDbContext(typeof(INotificationsDefinitionDbContext))] -[ReplaceDbContext(typeof(IMessageServiceDbContext))] -[ReplaceDbContext(typeof(IAbpDataProtectionManagementDbContext))] -[ReplaceDbContext(typeof(IGdprDbContext))] -[ReplaceDbContext(typeof(IDemoDbContext))] -[ReplaceDbContext(typeof(IAIManagementDbContext))] +//[ReplaceDbContext(typeof(IAuditLoggingDbContext))] +//[ReplaceDbContext(typeof(IIdentityDbContext))] +//[ReplaceDbContext(typeof(IOpenIddictDbContext))] +//[ReplaceDbContext(typeof(ISaasDbContext))] +//[ReplaceDbContext(typeof(IFeatureManagementDbContext))] +//[ReplaceDbContext(typeof(ISettingManagementDbContext))] +//[ReplaceDbContext(typeof(IPermissionManagementDbContext))] +//[ReplaceDbContext(typeof(ITextTemplatingDbContext))] +//[ReplaceDbContext(typeof(ITaskManagementDbContext))] +//[ReplaceDbContext(typeof(IWebhooksManagementDbContext))] +//[ReplaceDbContext(typeof(IPlatformDbContext))] +//[ReplaceDbContext(typeof(ILocalizationDbContext))] +//[ReplaceDbContext(typeof(INotificationsDbContext))] +//[ReplaceDbContext(typeof(INotificationsDefinitionDbContext))] +//[ReplaceDbContext(typeof(IMessageServiceDbContext))] +//[ReplaceDbContext(typeof(IAbpDataProtectionManagementDbContext))] +//[ReplaceDbContext(typeof(IGdprDbContext))] +//[ReplaceDbContext(typeof(IDemoDbContext))] +//[ReplaceDbContext(typeof(IAIManagementDbContext))] +//[ReplaceDbContext(typeof(IBlobManagementDbContext))] [ConnectionStringName("Default")] public class SingleMigrationsDbContext : @@ -96,7 +99,8 @@ public class SingleMigrationsDbContext : IAbpDataProtectionManagementDbContext, IGdprDbContext, IDemoDbContext, - IAIManagementDbContext + IAIManagementDbContext, + IBlobManagementDbContext { public SingleMigrationsDbContext(DbContextOptions options) : base(options) @@ -154,6 +158,8 @@ public class SingleMigrationsDbContext : public DbSet PermissionGrants { get; set; } + public DbSet ResourcePermissionGrants { get; set; } + public DbSet TextTemplates { get; set; } public DbSet TextTemplateDefinitions { get; set; } @@ -248,6 +254,10 @@ public class SingleMigrationsDbContext : public DbSet TokenUsageRecords { get; set; } + public DbSet BlobContainers { get; set; } + + public DbSet Blobs { get; set; } + protected override void OnModelCreating(ModelBuilder modelBuilder) { base.OnModelCreating(modelBuilder); @@ -273,5 +283,7 @@ public class SingleMigrationsDbContext : modelBuilder.ConfigureDemo(); modelBuilder.ConfigureAIManagement(); + + modelBuilder.ConfigureBlobManagement(); } } diff --git a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsEntityFrameworkCoreModule.cs index 9a6f76890..f210c3cc6 100644 --- a/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Applications.Single.EntityFrameworkCore/SingleMigrationsEntityFrameworkCoreModule.cs @@ -1,5 +1,6 @@ using LINGYUN.Abp.AIManagement.EntityFrameworkCore; using LINGYUN.Abp.AuditLogging.EntityFrameworkCore; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Identity.EntityFrameworkCore; @@ -9,6 +10,7 @@ using LINGYUN.Abp.Notifications.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TaskManagement.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; +using LINGYUN.Abp.UI.Navigation.VueVbenAdmin5; using LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore; using LINGYUN.Abp.WeChat; using LINGYUN.Platform.EntityFrameworkCore; @@ -31,6 +33,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore; typeof(AbpNotificationsEntityFrameworkCoreModule), typeof(AbpMessageServiceEntityFrameworkCoreModule), typeof(AbpAIManagementEntityFrameworkCoreModule), + typeof(AbpBlobManagementEntityFrameworkCoreModule), typeof(PlatformEntityFrameworkCoreModule), typeof(AbpLocalizationManagementEntityFrameworkCoreModule), typeof(AbpIdentityEntityFrameworkCoreModule), @@ -39,6 +42,7 @@ namespace LY.MicroService.Applications.Single.EntityFrameworkCore; typeof(WebhooksManagementEntityFrameworkCoreModule), typeof(TaskManagementEntityFrameworkCoreModule), typeof(AbpGdprEntityFrameworkCoreModule), + typeof(AbpUINavigationVueVbenAdmin5Module), typeof(AbpWeChatModule), typeof(AbpDataDbMigratorModule) )] diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDataSeeder.cs new file mode 100644 index 000000000..abc51af3b --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDataSeeder.cs @@ -0,0 +1,36 @@ +using LY.MicroService.AuthServer.EntityFrameworkCore.DataSeeds; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace LY.MicroService.AuthServer.EntityFrameworkCore; + +public class AuthServerDataSeeder : ITransientDependency +{ + protected ICurrentTenant CurrentTenant { get; } + protected OpenIddictDataSeeder OpenIddictDataSeeder { get; } + protected IdentityClaimTypeDataSeeder IdentityClaimTypeDataSeeder { get; } + protected IdentityUserRoleDataSeeder IdentityUserRoleDataSeeder { get; } + public AuthServerDataSeeder( + ICurrentTenant currentTenant, + OpenIddictDataSeeder openIddictDataSeeder, + IdentityClaimTypeDataSeeder identityClaimTypeDataSeeder, + IdentityUserRoleDataSeeder identityUserRoleDataSeeder) + { + CurrentTenant = currentTenant; + OpenIddictDataSeeder = openIddictDataSeeder; + IdentityClaimTypeDataSeeder = identityClaimTypeDataSeeder; + IdentityUserRoleDataSeeder = identityUserRoleDataSeeder; + } + + public virtual async Task SeedAsync(DataSeedContext context) + { + using (CurrentTenant.Change(context.TenantId)) + { + await OpenIddictDataSeeder.SeedAsync(context); + await IdentityClaimTypeDataSeeder.SeedAsync(context); + await IdentityUserRoleDataSeeder.SeedAsync(context); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationEventHandler.cs index 3f4837beb..013822cab 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationEventHandler.cs @@ -1,29 +1,18 @@ -using LINGYUN.Abp.Identity; -using Microsoft.AspNetCore.Identity; -using Microsoft.Extensions.Logging; -using System; -using System.Collections.Generic; +using Microsoft.Extensions.Logging; using System.Threading.Tasks; -using Volo.Abp.Authorization.Permissions; using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.EntityFrameworkCore.Migrations; using Volo.Abp.EventBus.Distributed; using Volo.Abp.Guids; -using Volo.Abp.Identity; using Volo.Abp.MultiTenancy; -using Volo.Abp.PermissionManagement; using Volo.Abp.Uow; -using IdentityPermissions = Volo.Abp.Identity.IdentityPermissions; namespace LY.MicroService.AuthServer.EntityFrameworkCore; public class AuthServerDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase { - protected IGuidGenerator GuidGenerator { get; } - protected IdentityUserManager IdentityUserManager { get; } - protected IdentityRoleManager IdentityRoleManager { get; } - protected IPermissionDataSeeder PermissionDataSeeder { get; } + protected AuthServerDataSeeder DataSeeder { get; } public AuthServerDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -33,101 +22,26 @@ public class AuthServerDbMigrationEventHandler : EfCoreDatabaseMigrationEventHan IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, IGuidGenerator guidGenerator, - IdentityUserManager identityUserManager, - IdentityRoleManager identityRoleManager, - IPermissionDataSeeder permissionDataSeeder) + AuthServerDataSeeder dataSeeder) : base( ConnectionStringNameAttribute.GetConnStringName(), currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { - GuidGenerator = guidGenerator; - IdentityUserManager = identityUserManager; - IdentityRoleManager = identityRoleManager; - PermissionDataSeeder = permissionDataSeeder; + DataSeeder = dataSeeder; } protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - if (!schemaMigrated) + // 新租户数据种子 + var context = new DataSeedContext(eventData.Id); + if (eventData.Properties != null) { - return; - } - - using (CurrentTenant.Change(eventData.Id)) - { - await SeedTenantDefaultRoleAsync(eventData); - await SeedTenantAdminAsync(eventData); - } - } - - protected async virtual Task SeedTenantDefaultRoleAsync(TenantCreatedEto eventData) - { - // 默认用户 - var roleId = GuidGenerator.Create(); - var defaultRole = new IdentityRole(roleId, "Users", eventData.Id) - { - IsStatic = true, - IsPublic = true, - IsDefault = true, - }; - (await IdentityRoleManager.CreateAsync(defaultRole)).CheckErrors(); - - // 所有用户都应该具有查询用户权限, 用于IM场景 - await PermissionDataSeeder.SeedAsync( - RolePermissionValueProvider.ProviderName, - defaultRole.Name, - new string[] + foreach (var property in eventData.Properties) { - IdentityPermissions.UserLookup.Default, - IdentityPermissions.Users.Default - }, - tenantId: eventData.Id); - } - - protected async virtual Task SeedTenantAdminAsync(TenantCreatedEto eventData) - { - const string tenantAdminUserName = "admin"; - const string tenantAdminRoleName = "admin"; - Guid tenantAdminRoleId; - if (!await IdentityRoleManager.RoleExistsAsync(tenantAdminRoleName)) - { - tenantAdminRoleId = GuidGenerator.Create(); - var tenantAdminRole = new IdentityRole(tenantAdminRoleId, tenantAdminRoleName, eventData.Id) - { - IsStatic = true, - IsPublic = true - }; - (await IdentityRoleManager.CreateAsync(tenantAdminRole)).CheckErrors(); - } - else - { - var tenantAdminRole = await IdentityRoleManager.FindByNameAsync(tenantAdminRoleName); - tenantAdminRoleId = tenantAdminRole.Id; + context.WithProperty(property.Key, property.Value); + } } - var adminUserId = GuidGenerator.Create(); - if (eventData.Properties.TryGetValue("AdminUserId", out var userIdString) && - Guid.TryParse(userIdString, out var adminUserGuid)) - { - adminUserId = adminUserGuid; - } - var adminEmailAddress = eventData.Properties.GetOrDefault("AdminEmail") ?? "admin@abp.io"; - var adminPassword = eventData.Properties.GetOrDefault("AdminPassword") ?? "1q2w3E*"; - - var tenantAdminUser = await IdentityUserManager.FindByNameAsync(adminEmailAddress); - if (tenantAdminUser == null) - { - tenantAdminUser = new IdentityUser( - adminUserId, - tenantAdminUserName, - adminEmailAddress, - eventData.Id); - - tenantAdminUser.AddRole(tenantAdminRoleId); - - // 创建租户管理用户 - (await IdentityUserManager.CreateAsync(tenantAdminUser)).CheckErrors(); - (await IdentityUserManager.AddPasswordAsync(tenantAdminUser, adminPassword)).CheckErrors(); - } + await DataSeeder.SeedAsync(context); } } diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerMigrationsEntityFrameworkCoreModule.cs index 5d46c0616..57eb2f8fe 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerMigrationsEntityFrameworkCoreModule.cs @@ -1,14 +1,15 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Identity.EntityFrameworkCore; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; using LINGYUN.Platform.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.Authorization; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.OpenIddict.EntityFrameworkCore; @@ -29,7 +30,7 @@ namespace LY.MicroService.AuthServer.EntityFrameworkCore; typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpTextTemplatingEntityFrameworkCoreModule), typeof(PlatformEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpDataDbMigratorModule) )] public class AuthServerMigrationsEntityFrameworkCoreModule : AbpModule @@ -44,7 +45,7 @@ public class AuthServerMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs new file mode 100644 index 000000000..88e530b07 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs @@ -0,0 +1,89 @@ +using JetBrains.Annotations; +using Microsoft.Extensions.Logging; +using OpenIddict.Abstractions; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Identity; + +namespace LY.MicroService.AuthServer.EntityFrameworkCore.DataSeeds; +public class IdentityClaimTypeDataSeeder : ITransientDependency +{ + public ILogger Logger { protected get; set; } + + protected IGuidGenerator GuidGenerator { get; } + protected IdentityClaimTypeManager IdentityClaimTypeManager { get; } + protected IIdentityClaimTypeRepository IdentityClaimTypeRepository { get; } + public IdentityClaimTypeDataSeeder( + IGuidGenerator guidGenerator, + IdentityClaimTypeManager identityClaimTypeManager, + IIdentityClaimTypeRepository identityClaimTypeRepository) + { + GuidGenerator = guidGenerator; + IdentityClaimTypeManager = identityClaimTypeManager; + IdentityClaimTypeRepository = identityClaimTypeRepository; + } + + public async virtual Task SeedAsync(DataSeedContext context) + { + if (context.TenantId.HasValue) + { + return; + } + + Logger.LogInformation("Seeding the default identity claim types..."); + + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Address); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Birthdate, valueType: IdentityClaimValueType.DateTime); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Country); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Email); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.EmailVerified, valueType: IdentityClaimValueType.Boolean); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.FamilyName); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Gender); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.GivenName); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Locale); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Locality); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.MiddleName); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Name); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Nickname); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.PhoneNumber); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.PhoneNumberVerified, valueType: IdentityClaimValueType.Boolean); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Picture); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.PostalCode); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.PreferredUsername); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Profile); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Region); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Role); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.StreetAddress); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Username); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Website); + await CreateIdentityClaimTypeAsync(OpenIddictConstants.Claims.Zoneinfo); + + Logger.LogInformation("Seeding default identity claim types completed."); + } + + private async Task CreateIdentityClaimTypeAsync( + [NotNull] string name, + bool required = false, + bool isStatic = false, + [CanBeNull] string regex = null, + [CanBeNull] string regexDescription = null, + [CanBeNull] string description = null, + IdentityClaimValueType valueType = IdentityClaimValueType.String) + { + if (!await IdentityClaimTypeRepository.AnyAsync(name)) + { + await IdentityClaimTypeManager.CreateAsync( + new IdentityClaimType( + GuidGenerator.Create(), + name, + required, + isStatic, + regex, + regexDescription, + description, + valueType)); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs new file mode 100644 index 000000000..2c7630193 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs @@ -0,0 +1,125 @@ +using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Options; +using System; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Identity; + +namespace LY.MicroService.AuthServer.EntityFrameworkCore.DataSeeds; + +public class IdentityUserRoleDataSeeder : ITransientDependency +{ + public const string AdminUserIdPropertyName = "AdminUserId"; + public const string AdminEmailPropertyName = "AdminEmail"; + public const string AdminEmailDefaultValue = "admin@abp.io"; + public const string AdminUserNamePropertyName = "AdminUserName"; + public const string AdminUserNameDefaultValue = "admin"; + public const string AdminPasswordPropertyName = "AdminPassword"; + public const string AdminPasswordDefaultValue = "1q2w3E*"; + + protected IGuidGenerator GuidGenerator { get; } + protected IIdentityRoleRepository RoleRepository { get; } + protected IIdentityUserRepository UserRepository { get; } + protected ILookupNormalizer LookupNormalizer { get; } + protected IdentityUserManager UserManager { get; } + protected IdentityRoleManager RoleManager { get; } + protected IOptions IdentityOptions { get; } + + public IdentityUserRoleDataSeeder( + IGuidGenerator guidGenerator, + IIdentityRoleRepository roleRepository, + IIdentityUserRepository userRepository, + ILookupNormalizer lookupNormalizer, + IdentityUserManager userManager, + IdentityRoleManager roleManager, + IOptions identityOptions) + { + GuidGenerator = guidGenerator; + RoleRepository = roleRepository; + UserRepository = userRepository; + LookupNormalizer = lookupNormalizer; + UserManager = userManager; + RoleManager = roleManager; + IdentityOptions = identityOptions; + } + + public virtual async Task SeedAsync(DataSeedContext context) + { + await SeedAdminUserAsync(context); + await SeedDefaultRoleAsync(context); + } + + private async Task SeedAdminUserAsync(DataSeedContext context) + { + await IdentityOptions.SetAsync(); + + const string adminRoleName = "admin"; + var adminUserName = context?[AdminUserNamePropertyName] as string ?? AdminUserNameDefaultValue; + + Guid adminRoleId; + if (!await RoleManager.RoleExistsAsync(adminRoleName)) + { + adminRoleId = GuidGenerator.Create(); + var adminRole = new IdentityRole( + adminRoleId, + adminRoleName, + context.TenantId) + { + IsStatic = true, + IsPublic = true + }; + (await RoleManager.CreateAsync(adminRole)).CheckErrors(); + } + else + { + var adminRole = await RoleManager.FindByNameAsync(adminRoleName); + adminRoleId = adminRole.Id; + } + + var adminUserId = GuidGenerator.Create(); + if (context.Properties.TryGetValue(AdminUserIdPropertyName, out var userIdString) && + Guid.TryParse(userIdString?.ToString(), out var adminUserGuid)) + { + adminUserId = adminUserGuid; + } + var adminEmailAddress = context?[AdminEmailPropertyName] as string ?? AdminEmailDefaultValue; + var adminPassword = context?[AdminPasswordPropertyName] as string ?? AdminPasswordDefaultValue; + + var adminUser = await UserManager.FindByNameAsync(adminUserName); + if (adminUser == null) + { + adminUser = new IdentityUser( + adminUserId, + adminUserName, + adminEmailAddress, + context.TenantId); + + adminUser.AddRole(adminRoleId); + + // 创建租户管理用户 + (await UserManager.CreateAsync(adminUser)).CheckErrors(); + (await UserManager.AddPasswordAsync(adminUser, adminPassword)).CheckErrors(); + } + } + + private async Task SeedDefaultRoleAsync(DataSeedContext context) + { + const string defaultRoleName = "Users"; + if (await RoleManager.FindByNameAsync(defaultRoleName) != null) + { + var roleId = GuidGenerator.Create(); + var defaultRole = new IdentityRole( + roleId, + defaultRoleName, + context.TenantId) + { + IsStatic = true, + IsPublic = true, + IsDefault = true, + }; + (await RoleManager.CreateAsync(defaultRole)).CheckErrors(); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs new file mode 100644 index 000000000..7cf0622a7 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/OpenIddictDataSeeder.cs @@ -0,0 +1,575 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using OpenIddict.Abstractions; +using System; +using System.Collections.Generic; +using System.Globalization; +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.OpenIddict; +using Volo.Abp.OpenIddict.Applications; +using Volo.Abp.OpenIddict.Scopes; +using Volo.Abp.PermissionManagement; + +namespace LY.MicroService.AuthServer.EntityFrameworkCore.DataSeeds; + +public class OpenIddictDataSeeder : OpenIddictDataSeedContributorBase, ITransientDependency +{ + public ILogger Logger { protected get; set; } + protected IPermissionDataSeeder PermissionDataSeeder { get; } + public OpenIddictDataSeeder( + IConfiguration configuration, + IOpenIddictApplicationRepository openIddictApplicationRepository, + IAbpApplicationManager applicationManager, + IOpenIddictScopeRepository openIddictScopeRepository, + IOpenIddictScopeManager scopeManager, + IPermissionDataSeeder permissionDataSeeder) + : base(configuration, openIddictApplicationRepository, applicationManager, openIddictScopeRepository, scopeManager) + { + PermissionDataSeeder = permissionDataSeeder; + + Logger = NullLogger.Instance; + } + + public async virtual Task SeedAsync(DataSeedContext context) + { + if (context.TenantId.HasValue) + { + return; + } + var scope = "lingyun-abp-application"; + + Logger.LogInformation("Seeding the default scope..."); + await CreateDefaultScopeAsync(); + await CreateApiScopeAsync(scope); + + Logger.LogInformation("Seeding the default applications..."); + await CreateApplicationAsync(scope); + + Logger.LogInformation("Seeding default applications completed."); + } + + private async Task CreateDefaultScopeAsync() + { + // OpenId Connect + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.OpenId, + DisplayName = "OpenId Connect", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "身份认证", + [CultureInfo.GetCultureInfo("en")] = "OpenId Connect" + }, + Description = "OpenId Connect协议进行身份验证", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序使用您的身份信息进行登录", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to authenticate you using OpenID Connect" + } + }); + + // Profile + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.Profile, + DisplayName = "个人资料", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "个人资料", + [CultureInfo.GetCultureInfo("en")] = "Profile" + }, + Description = "访问您的基本个人资料信息", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序访问您的姓名、头像等基本信息", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your basic profile information like name and picture" + } + }); + + // Email + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.Email, + DisplayName = "电子邮件", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "电子邮件", + [CultureInfo.GetCultureInfo("en")] = "Email" + }, + Description = "访问您的电子邮件地址", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序访问您的电子邮件地址", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your email address" + } + }); + + // Phone + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.Phone, + DisplayName = "电话号码", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "电话号码", + [CultureInfo.GetCultureInfo("en")] = "Phone" + }, + Description = "访问您的电话号码", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序访问您的电话号码", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your phone number" + } + }); + + // Address + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.Address, + DisplayName = "地址信息", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "地址信息", + [CultureInfo.GetCultureInfo("en")] = "Address" + }, + Description = "访问您的地址信息", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序访问您的地址信息", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your address information" + } + }); + + // Roles + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.Roles, + DisplayName = "角色信息", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "角色信息", + [CultureInfo.GetCultureInfo("en")] = "Roles" + }, + Description = "访问您的角色信息", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序访问您的角色和权限信息", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your roles and permissions" + } + }); + + // OfflineAccess + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = OpenIddictConstants.Scopes.OfflineAccess, + DisplayName = "离线访问", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "离线访问", + [CultureInfo.GetCultureInfo("en")] = "Offline Access" + }, + Description = "在您未登录时访问您的信息", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序在您未登录时访问您的信息", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to access your information while you are offline" + } + }); + } + + private async Task CreateApiScopeAsync(string scope) + { + // 前端汇总授权范围 + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = scope, + DisplayName = "微服务访问授权", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "微服务访问授权", + [CultureInfo.GetCultureInfo("en")] = "Single Applications" + }, + Description = "适用于微服务体系的接口授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "允许应用程序使用各微服务模块的接口", + [CultureInfo.GetCultureInfo("en")] = "Allow the application to use the interfaces of each microservice module" + }, + Resources = + { + "api-gateway", + "auth-server", + "admin-service", + "ai-service", + "identity-service", + "localization-service", + "message-service", + "platform-service", + "task-service", + "webhook-service", + "wechat-service", + "workflow-service", + } + }); + // ApiGateway Swagger + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "api-gateway", + DisplayName = "Api Gateway", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "应用程序接口网关", + [CultureInfo.GetCultureInfo("en")] = "Api Gateway" + }, + Description = "适用于应用程序接口网关Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于应用程序接口网关Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to application Programming interface gateway Swagger authorization" + }, + Resources = + { + "api-gateway", + } + }); + // Admin Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "admin-service", + DisplayName = "Admin Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "后台管理服务", + [CultureInfo.GetCultureInfo("en")] = "Admin Service" + }, + Description = "适用于后台管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于后台管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the back-end management service Swagger authorization" + }, + Resources = + { + "admin-service", + } + }); + // Identity Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "identity-service", + DisplayName = "Identity Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "身份认证服务", + [CultureInfo.GetCultureInfo("en")] = "Identity Service" + }, + Description = "适用于身份认证服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于身份认证服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the identity service Swagger authorization" + }, + Resources = + { + "identity-service", + } + }); + // Localization Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "localization-service", + DisplayName = "Localization Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "本地化管理服务", + [CultureInfo.GetCultureInfo("en")] = "Localization Service" + }, + Description = "适用于本地化管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于本地化管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Localization service Swagger authorization" + }, + Resources = + { + "localization-service", + } + }); + // Message Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "message-service", + DisplayName = "Message Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "消息管理服务", + [CultureInfo.GetCultureInfo("en")] = "Message Service" + }, + Description = "适用于消息管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于消息管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Message service Swagger authorization" + }, + Resources = + { + "message-service", + } + }); + // Platform Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "platform-service", + DisplayName = "Platform Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "平台管理服务", + [CultureInfo.GetCultureInfo("en")] = "Platform Service" + }, + Description = "适用于平台管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于平台管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Platform service Swagger authorization" + }, + Resources = + { + "platform-service", + } + }); + // Task Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "task-service", + DisplayName = "Task Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "任务管理服务", + [CultureInfo.GetCultureInfo("en")] = "Task Service" + }, + Description = "适用于任务管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于任务管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Task service Swagger authorization" + }, + Resources = + { + "task-service", + } + }); + // Webhook Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "webhook-service", + DisplayName = "Webhook Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "Webhook管理服务", + [CultureInfo.GetCultureInfo("en")] = "Webhook Service" + }, + Description = "适用于Webhook管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于Webhook管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Webhook service Swagger authorization" + }, + Resources = + { + "webhook-service", + } + }); + // Wechat Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "wechat-service", + DisplayName = "Wechat Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "微信管理服务", + [CultureInfo.GetCultureInfo("en")] = "Wechat Service" + }, + Description = "适用于微信管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于微信管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Wechat service Swagger authorization" + }, + Resources = + { + "wechat-service", + } + }); + // Workflow Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "workflow-service", + DisplayName = "Workflow Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "工作流管理服务", + [CultureInfo.GetCultureInfo("en")] = "Workflow Service" + }, + Description = "适用于工作流管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于工作流管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Workflow service Swagger authorization" + }, + Resources = + { + "workflow-service", + } + }); + // AI Service + await CreateScopesAsync(new OpenIddictScopeDescriptor + { + Name = "ai-service", + DisplayName = "Artificial Intelligence Service", + DisplayNames = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "AI管理服务", + [CultureInfo.GetCultureInfo("en")] = "Artificial Intelligence Service" + }, + Description = "适用于AI管理服务Swagger授权", + Descriptions = + { + [CultureInfo.GetCultureInfo("zh-Hans")] = "适用于AI管理服务Swagger授权", + [CultureInfo.GetCultureInfo("en")] = "Applicable to the Artificial Intelligence service Swagger authorization" + }, + Resources = + { + "ai-service", + } + }); + } + + private async Task CreateApplicationAsync(string scope) + { + var configurationSection = Configuration.GetSection("OpenIddict:Applications"); + var vueClientId = configurationSection["VueAdmin:ClientId"]; + if (!vueClientId.IsNullOrWhiteSpace()) + { + Logger.LogInformation("Seeding application {vueClientId}...", vueClientId); + + var vueClientRootUrls = configurationSection.GetSection("VueAdmin:RootUrls").Get>() ?? []; + + var vueClientRedirectUrls = new List(); + var vueClientPostLogoutRedirectUrls = new List(); + vueClientRootUrls.ForEach(url => + { + vueClientRedirectUrls.Add(url.EnsureEndsWith('/')); + vueClientRedirectUrls.Add(url.EnsureEndsWith('/') + "signin-callback"); + + vueClientPostLogoutRedirectUrls.Add(url.EnsureEndsWith('/')); + vueClientPostLogoutRedirectUrls.Add(url.EnsureEndsWith('/') + "signout-callback"); + }); + + await CreateOrUpdateApplicationAsync( + OpenIddictConstants.ApplicationTypes.Web, + vueClientId, + OpenIddictConstants.ClientTypes.Confidential, + OpenIddictConstants.ConsentTypes.Explicit, + "Abp Vue Admin Client", + configurationSection["VueAdmin:ClientSecret"] ?? "1q2w3e*", + [OpenIddictConstants.GrantTypes.AuthorizationCode, + OpenIddictConstants.GrantTypes.Implicit, + OpenIddictConstants.GrantTypes.Password, + OpenIddictConstants.GrantTypes.RefreshToken], + [OpenIddictConstants.Scopes.OpenId, + OpenIddictConstants.Scopes.Email, + OpenIddictConstants.Scopes.Roles, + OpenIddictConstants.Scopes.Address, + OpenIddictConstants.Scopes.Phone, + OpenIddictConstants.Scopes.Profile, + OpenIddictConstants.Scopes.OfflineAccess, + scope], + vueClientRedirectUrls, + vueClientPostLogoutRedirectUrls); + + var vueClientPermissions = new string[1] + { + "AbpIdentity.UserLookup" + }; + await PermissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, vueClientId, vueClientPermissions); + } + + var internalServiceClientId = configurationSection["InternalService:ClientId"]; + if (!internalServiceClientId.IsNullOrWhiteSpace()) + { + Logger.LogInformation("Seeding application {internalServiceClientId}...", internalServiceClientId); + + await CreateOrUpdateApplicationAsync( + OpenIddictConstants.ApplicationTypes.Native, + internalServiceClientId, + OpenIddictConstants.ClientTypes.Confidential, + OpenIddictConstants.ConsentTypes.Explicit, + "Abp Internal Service Client", + configurationSection["InternalService:ClientSecret"] ?? "1q2w3e*", + [OpenIddictConstants.GrantTypes.ClientCredentials], + [OpenIddictConstants.ResponseTypes.Token, scope]); + } + + var oauthClientId = configurationSection["VueOAuthClient:ClientId"]; + if (!oauthClientId.IsNullOrWhiteSpace()) + { + Logger.LogInformation("Seeding application {oauthClientId}...", oauthClientId); + + var oauthClientRootUrls = configurationSection.GetSection("VueOAuthClient:RootUrls").Get>() ?? []; + + var oauthClientRedirectUrls = new List(); + var oauthClientPostLogoutRedirectUrls = new List(); + oauthClientRootUrls.ForEach(url => + { + oauthClientRedirectUrls.Add(url.EnsureEndsWith('/')); + oauthClientRedirectUrls.Add(url.EnsureEndsWith('/') + "signin-callback"); + oauthClientRedirectUrls.Add(url.EnsureEndsWith('/') + "swagger/oauth2-redirect.html"); + + oauthClientPostLogoutRedirectUrls.Add(url.EnsureEndsWith('/')); + oauthClientPostLogoutRedirectUrls.Add(url.EnsureEndsWith('/') + "signout-callback"); + }); + + await CreateOrUpdateApplicationAsync( + OpenIddictConstants.ApplicationTypes.Web, + oauthClientId, + OpenIddictConstants.ClientTypes.Public, + OpenIddictConstants.ConsentTypes.Implicit, + "Abp OAuth Client", + null, + [OpenIddictConstants.GrantTypes.AuthorizationCode, + OpenIddictConstants.GrantTypes.RefreshToken], + [OpenIddictConstants.Scopes.OpenId, + OpenIddictConstants.Scopes.Email, + OpenIddictConstants.Scopes.Roles, + OpenIddictConstants.Scopes.Address, + OpenIddictConstants.Scopes.Phone, + OpenIddictConstants.Scopes.Profile, + OpenIddictConstants.Scopes.OfflineAccess, + scope, + "api-gateway", + "auth-server", + "admin-service", + "ai-service", + "identity-service", + "localization-service", + "message-service", + "platform-service", + "task-service", + "webhook-service", + "wechat-service", + "workflow-service"], + oauthClientRedirectUrls, + oauthClientPostLogoutRedirectUrls); + + var oauthClientPermissions = new string[1] + { + "AbpIdentity.UserLookup" + }; + await PermissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, oauthClientId, oauthClientPermissions); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/LY.MicroService.AuthServer.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/LY.MicroService.AuthServer.EntityFrameworkCore.csproj index 525e72342..97c90572d 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/LY.MicroService.AuthServer.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/LY.MicroService.AuthServer.EntityFrameworkCore.csproj @@ -15,7 +15,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -24,6 +23,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.Designer.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.Designer.cs new file mode 100644 index 000000000..2d9a0b087 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.Designer.cs @@ -0,0 +1,1375 @@ +// +using System; +using LY.MicroService.AuthServer.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.AuthServer.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(AuthServerMigrationsDbContext))] + [Migration("20260420064613_Upgrade-Abp-Framework-To-10-0-2")] + partial class UpgradeAbpFrameworkTo1002 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("datetime(6)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("SourceTenantId") + .HasColumnType("char(36)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("TargetTenantId") + .HasColumnType("char(36)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("tinyint(1)") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.Property("LastAccessed") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("SignedIn") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("datetime(6)"); + + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("tinyint(1)"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EndTime") + .HasColumnType("datetime(6)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("StartTime") + .HasColumnType("datetime(6)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("varchar(196)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("varchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ApplicationType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ClientId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("ClientSecret") + .HasColumnType("longtext"); + + b.Property("ClientType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ClientUri") + .HasColumnType("longtext"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentType") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("DisplayNames") + .HasColumnType("longtext"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutUri") + .HasColumnType("longtext"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("JsonWebKeySet") + .HasColumnType("longtext"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasColumnType("longtext"); + + b.Property("Permissions") + .HasColumnType("longtext"); + + b.Property("PostLogoutRedirectUris") + .HasColumnType("longtext"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("RedirectUris") + .HasColumnType("longtext"); + + b.Property("Requirements") + .HasColumnType("longtext"); + + b.Property("Settings") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("OpenIddictApplications", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ApplicationId") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("Scopes") + .HasColumnType("longtext"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("varchar(400)"); + + b.Property("Type") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.HasKey("Id"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictAuthorizations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Scopes.OpenIddictScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("Descriptions") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .HasColumnType("longtext"); + + b.Property("DisplayNames") + .HasColumnType("longtext"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("Resources") + .HasColumnType("longtext"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("OpenIddictScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ApplicationId") + .HasColumnType("char(36)"); + + b.Property("AuthorizationId") + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExpirationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Payload") + .HasColumnType("longtext"); + + b.Property("Properties") + .HasColumnType("longtext"); + + b.Property("RedemptionDate") + .HasColumnType("datetime(6)"); + + b.Property("ReferenceId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("Status") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Subject") + .HasMaxLength(400) + .HasColumnType("varchar(400)"); + + b.Property("Type") + .HasMaxLength(150) + .HasColumnType("varchar(150)"); + + b.HasKey("Id"); + + b.HasIndex("AuthorizationId"); + + b.HasIndex("ReferenceId"); + + b.HasIndex("ApplicationId", "Status", "Subject", "Type"); + + b.ToTable("OpenIddictTokens", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + }); + + modelBuilder.Entity("Volo.Abp.OpenIddict.Tokens.OpenIddictToken", b => + { + b.HasOne("Volo.Abp.OpenIddict.Applications.OpenIddictApplication", null) + .WithMany() + .HasForeignKey("ApplicationId"); + + b.HasOne("Volo.Abp.OpenIddict.Authorizations.OpenIddictAuthorization", null) + .WithMany() + .HasForeignKey("AuthorizationId"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.cs new file mode 100644 index 000000000..89513820f --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/20260420064613_Upgrade-Abp-Framework-To-10-0-2.cs @@ -0,0 +1,157 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.AuthServer.EntityFrameworkCore.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1002 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Type", + table: "OpenIddictTokens", + type: "varchar(150)", + maxLength: 150, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(50)", + oldMaxLength: 50, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "FrontChannelLogoutUri", + table: "OpenIddictApplications", + type: "longtext", + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "datetime(6)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(256)", + maxLength: 256, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(64)", + oldMaxLength: 64, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "varbinary(1024)", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Data = table.Column(type: "json", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Password = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropColumn( + name: "FrontChannelLogoutUri", + table: "OpenIddictApplications"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + + migrationBuilder.AlterColumn( + name: "Type", + table: "OpenIddictTokens", + type: "varchar(50)", + maxLength: 50, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(150)", + oldMaxLength: 150, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(64)", + maxLength: 64, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(256)", + oldMaxLength: 256, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs index 4ea3c3fce..bd355a55c 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/Migrations/AuthServerMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -344,8 +344,8 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations .HasColumnType("varchar(64)"); b.Property("DeviceInfo") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); + .HasMaxLength(256) + .HasColumnType("varchar(256)"); b.Property("ExtraProperties") .HasColumnType("longtext") @@ -466,6 +466,15 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations b.Property("LastPasswordChangeTime") .HasColumnType("datetime(6)"); + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("tinyint(1)") @@ -662,6 +671,47 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -874,6 +924,9 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations .HasColumnType("longtext") .HasColumnName("ExtraProperties"); + b.Property("FrontChannelLogoutUri") + .HasColumnType("longtext"); + b.Property("IsDeleted") .ValueGeneratedOnAdd() .HasColumnType("tinyint(1)") @@ -1097,8 +1150,8 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations .HasColumnType("varchar(400)"); b.Property("Type") - .HasMaxLength(50) - .HasColumnType("varchar(50)"); + .HasMaxLength(150) + .HasColumnType("varchar(150)"); b.HasKey("Id"); @@ -1162,6 +1215,62 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -1244,6 +1353,10 @@ namespace LY.MicroService.AuthServer.DbMigrator.Migrations b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs new file mode 100644 index 000000000..c0a681648 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs @@ -0,0 +1,61 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using System; +using System.Linq; +using System.Threading.Tasks; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.PermissionManagement; + +namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; + +public class BackendAdminDataSeeder : ITransientDependency +{ + protected ILogger Logger { get; } + protected ICurrentTenant CurrentTenant { get; } + protected IPermissionDefinitionManager PermissionDefinitionManager { get; } + protected IPermissionDataSeeder PermissionDataSeeder { get; } + + public BackendAdminDataSeeder( + IPermissionDefinitionManager permissionDefinitionManager, + IPermissionDataSeeder permissionDataSeeder, + ICurrentTenant currentTenant) + { + PermissionDefinitionManager = permissionDefinitionManager; + PermissionDataSeeder = permissionDataSeeder; + CurrentTenant = currentTenant; + + Logger = NullLogger.Instance; + } + + public virtual async Task SeedAsync(DataSeedContext context) + { + using (CurrentTenant.Change(context.TenantId)) + { + await SeedAdminRolePermissionsAsync(context); + } + } + + private async Task SeedAdminRolePermissionsAsync(DataSeedContext context) + { + Logger.LogInformation("Seeding the default role permissions..."); + + var multiTenancySide = CurrentTenant.GetMultiTenancySide(); + var permissionNames = (await PermissionDefinitionManager.GetPermissionsAsync()) + .Where(p => p.MultiTenancySide.HasFlag(multiTenancySide)) + .Where(p => !p.Providers.Any() || p.Providers.Contains(RolePermissionValueProvider.ProviderName)) + .Select(p => p.Name) + .ToArray(); + + await PermissionDataSeeder.SeedAsync( + RolePermissionValueProvider.ProviderName, + "admin", + permissionNames, + context?.TenantId + ); + + Logger.LogInformation("Seed default role permissions completed."); + } +} diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs index 96fe11958..5d9254cba 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs @@ -1,5 +1,4 @@ using Microsoft.Extensions.Logging; -using System; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DistributedLocking; @@ -12,25 +11,35 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; public class BackendAdminDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase { - protected IDataSeeder DataSeeder { get; } + protected BackendAdminDataSeeder DataSeeder { get; } public BackendAdminDbMigrationEventHandler( - ICurrentTenant currentTenant, - IUnitOfWorkManager unitOfWorkManager, - ITenantStore tenantStore, + ICurrentTenant currentTenant, + IUnitOfWorkManager unitOfWorkManager, + ITenantStore tenantStore, IAbpDistributedLock abpDistributedLock, - IDistributedEventBus distributedEventBus, + IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - IDataSeeder dataSeeder) + BackendAdminDataSeeder dataSeeder) : base( - ConnectionStringNameAttribute.GetConnStringName(), + ConnectionStringNameAttribute.GetConnStringName(), currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { DataSeeder = dataSeeder; } - protected async override Task SeedAsync(Guid? tenantId) + protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - await DataSeeder.SeedAsync(tenantId); + // 新租户数据种子 + var context = new DataSeedContext(eventData.Id); + if (eventData.Properties != null) + { + foreach (var property in eventData.Properties) + { + context.WithProperty(property.Key, property.Value); + } + } + + await DataSeeder.SeedAsync(context); } } diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs index ac91a063f..d3ba6c223 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs @@ -1,10 +1,11 @@ using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.DataProtectionManagement.EntityFrameworkCore; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -19,7 +20,7 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpTextTemplatingEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpDataDbMigratorModule) )] public class BackendAdminMigrationsEntityFrameworkCoreModule : AbpModule @@ -34,7 +35,7 @@ public class BackendAdminMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Parameter); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj index fb09e9c31..26ccd53c5 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/LY.MicroService.BackendAdmin.EntityFrameworkCore.csproj @@ -14,7 +14,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -22,6 +21,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.Designer.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.Designer.cs new file mode 100644 index 000000000..e6c6f9c1b --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.Designer.cs @@ -0,0 +1,1102 @@ +// +using System; +using LY.MicroService.BackendAdmin.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(BackendAdminMigrationsDbContext))] + [Migration("20260420064540_Upgrade-Abp-Framework-To-10-0-2")] + partial class UpgradeAbpFrameworkTo1002 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("PropertyInfoId") + .HasColumnType("char(36)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(10) + .HasColumnType("varchar(10)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("PropertyInfoId", "Name"); + + b.ToTable("AbpAuthEntityEnums", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("JavaScriptType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("JavaScriptType"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("TypeFullName"); + + b.Property("TypeInfoId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TypeInfoId", "TypeFullName"); + + b.ToTable("AbpAuthEntityProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsAuditEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("TypeFullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("TypeFullName"); + + b.HasKey("Id"); + + b.HasIndex("TypeFullName"); + + b.ToTable("AbpAuthEntitites", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("longtext"); + + b.Property("EntityTypeId") + .HasColumnType("char(36)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("longtext") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("OrgCode") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("OrgCode"); + + b.Property("OrgId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthOrganizationUnitEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessedProperties") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("AccessedProperties"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("EntityTypeFullName") + .HasColumnType("longtext"); + + b.Property("EntityTypeId") + .HasColumnType("char(36)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FilterGroup") + .HasColumnType("longtext") + .HasColumnName("FilterGroup"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Operation") + .HasColumnType("int"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("RoleName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("EntityTypeId"); + + b.ToTable("AbpAuthRoleEntityRules", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.SubjectStrategy", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Strategy") + .HasColumnType("int"); + + b.Property("SubjectId") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("SubjectId"); + + b.Property("SubjectName") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("SubjectName"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpAuthSubjectStrategys", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Editions.Edition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.HasKey("Id"); + + b.HasIndex("DisplayName"); + + b.ToTable("AbpEditions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisableTime") + .HasColumnType("datetime(6)"); + + b.Property("EditionId") + .HasColumnType("char(36)"); + + b.Property("EnableTime") + .HasColumnType("datetime(6)"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("NormalizedName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.HasKey("Id"); + + b.HasIndex("EditionId"); + + b.HasIndex("Name"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpTenants", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.HasKey("TenantId", "Name"); + + b.ToTable("AbpTenantConnectionStrings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplate", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Content") + .HasMaxLength(1048576) + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Culture") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Culture"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("DisplayName"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .HasDatabaseName("IX_Tenant_Text_Template_Name"); + + b.ToTable("AbpTextTemplates", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TextTemplating.TextTemplateDefinition", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("DefaultCultureName") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("DefaultCultureName"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsInlineLocalized") + .HasColumnType("tinyint(1)"); + + b.Property("IsLayout") + .HasColumnType("tinyint(1)"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("Layout") + .HasMaxLength(60) + .HasColumnType("varchar(60)") + .HasColumnName("Layout"); + + b.Property("LocalizationResourceName") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("LocalizationResourceName"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Name"); + + b.Property("RenderEngine") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("RenderEngine"); + + b.HasKey("Id"); + + b.ToTable("AbpTextTemplateDefinitions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AllowedProviders") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("DefaultValue") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("IsAvailableToHost") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisibleToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ValueType") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatures", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpFeatureGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.FeatureManagement.FeatureValue", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpFeatureValues", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("MultiTenancySide") + .HasColumnType("tinyint unsigned"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ParentName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Providers") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("StateCheckers") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("GroupName"); + + b.HasIndex("ResourceName", "Name") + .IsUnique(); + + b.ToTable("AbpPermissions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpPermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.PermissionGroupDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpPermissionGroups", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.HasKey("Id"); + + b.HasIndex("Name", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpSettings", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.SettingManagement.SettingDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("DefaultValue") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.Property("Description") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEncrypted") + .HasColumnType("tinyint(1)"); + + b.Property("IsInherited") + .HasColumnType("tinyint(1)"); + + b.Property("IsVisibleToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Providers") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.HasKey("Id"); + + b.HasIndex("Name") + .IsUnique(); + + b.ToTable("AbpSettingDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityEnumInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", "PropertyInfo") + .WithMany("Enums") + .HasForeignKey("PropertyInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("PropertyInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "TypeInfo") + .WithMany("Properties") + .HasForeignKey("TypeInfoId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("TypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.OrganizationUnitEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.RoleEntityRule", b => + { + b.HasOne("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", "EntityTypeInfo") + .WithMany() + .HasForeignKey("EntityTypeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("EntityTypeInfo"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.HasOne("LINGYUN.Abp.Saas.Editions.Edition", "Edition") + .WithMany() + .HasForeignKey("EditionId"); + + b.Navigation("Edition"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.TenantConnectionString", b => + { + b.HasOne("LINGYUN.Abp.Saas.Tenants.Tenant", null) + .WithMany("ConnectionStrings") + .HasForeignKey("TenantId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityPropertyInfo", b => + { + b.Navigation("Enums"); + }); + + modelBuilder.Entity("LINGYUN.Abp.DataProtectionManagement.EntityTypeInfo", b => + { + b.Navigation("Properties"); + }); + + modelBuilder.Entity("LINGYUN.Abp.Saas.Tenants.Tenant", b => + { + b.Navigation("ConnectionStrings"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.cs new file mode 100644 index 000000000..d02701742 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/20260420064540_Upgrade-Abp-Framework-To-10-0-2.cs @@ -0,0 +1,127 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1002 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions"); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(128)", + oldMaxLength: 128) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ManagementPermissionName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.AddColumn( + name: "ResourceName", + table: "AbpPermissions", + type: "varchar(256)", + maxLength: 256, + nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpResourcePermissionGrants", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ProviderName = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ProviderKey = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ResourceName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ResourceKey = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpResourcePermissionGrants", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions", + columns: new[] { "ResourceName", "Name" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "IX_AbpResourcePermissionGrants_TenantId_Name_ResourceName_Resou~", + table: "AbpResourcePermissionGrants", + columns: new[] { "TenantId", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey" }, + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpResourcePermissionGrants"); + + migrationBuilder.DropIndex( + name: "IX_AbpPermissions_ResourceName_Name", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ManagementPermissionName", + table: "AbpPermissions"); + + migrationBuilder.DropColumn( + name: "ResourceName", + table: "AbpPermissions"); + + migrationBuilder.UpdateData( + table: "AbpPermissions", + keyColumn: "GroupName", + keyValue: null, + column: "GroupName", + value: ""); + + migrationBuilder.AlterColumn( + name: "GroupName", + table: "AbpPermissions", + type: "varchar(128)", + maxLength: 128, + nullable: false, + oldClrType: typeof(string), + oldType: "varchar(128)", + oldMaxLength: 128, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpPermissions_Name", + table: "AbpPermissions", + column: "Name", + unique: true); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/BackendAdminMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/BackendAdminMigrationsDbContextModelSnapshot.cs index 9e25ef587..d2253b016 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/BackendAdminMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/Migrations/BackendAdminMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -788,13 +788,16 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations .HasColumnName("ExtraProperties"); b.Property("GroupName") - .IsRequired() .HasMaxLength(128) .HasColumnType("varchar(128)"); b.Property("IsEnabled") .HasColumnType("tinyint(1)"); + b.Property("ManagementPermissionName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + b.Property("MultiTenancySide") .HasColumnType("tinyint unsigned"); @@ -811,6 +814,10 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations .HasMaxLength(128) .HasColumnType("varchar(128)"); + b.Property("ResourceName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + b.Property("StateCheckers") .HasMaxLength(256) .HasColumnType("varchar(256)"); @@ -819,7 +826,7 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations b.HasIndex("GroupName"); - b.HasIndex("Name") + b.HasIndex("ResourceName", "Name") .IsUnique(); b.ToTable("AbpPermissions", (string)null); @@ -886,6 +893,49 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore.Migrations b.ToTable("AbpPermissionGroups", (string)null); }); + modelBuilder.Entity("Volo.Abp.PermissionManagement.ResourcePermissionGrant", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ResourceKey") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ResourceName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name", "ResourceName", "ResourceKey", "ProviderName", "ProviderKey") + .IsUnique(); + + b.ToTable("AbpResourcePermissionGrants", (string)null); + }); + modelBuilder.Entity("Volo.Abp.SettingManagement.Setting", b => { b.Property("Id") diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/DataSeeder/WeChatResourceDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/DataSeeder/WeChatResourceDataSeeder.cs index e5b683e0f..51ff7be71 100644 --- a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/DataSeeder/WeChatResourceDataSeeder.cs +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/DataSeeder/WeChatResourceDataSeeder.cs @@ -1,13 +1,13 @@ using LINGYUN.Abp.WeChat; using LINGYUN.Abp.WeChat.Common.Security.Claims; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Guids; -using Volo.Abp.Identity; -using Volo.Abp.IdentityServer.IdentityResources; - -namespace LY.MicroService.IdentityServer.EntityFrameworkCore.DataSeeder; - +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Guids; +using Volo.Abp.Identity; +using Volo.Abp.IdentityServer.IdentityResources; + +namespace LY.MicroService.IdentityServer.EntityFrameworkCore.DataSeeder; + public class WeChatResourceDataSeeder : IWeChatResourceDataSeeder, ITransientDependency { protected IIdentityClaimTypeRepository ClaimTypeRepository { get; } @@ -27,15 +27,15 @@ public class WeChatResourceDataSeeder : IWeChatResourceDataSeeder, ITransientDep public async virtual Task CreateStandardResourcesAsync() { var wechatClaimTypes = new string[] - { - AbpWeChatClaimTypes.AvatarUrl, - AbpWeChatClaimTypes.City, - AbpWeChatClaimTypes.Country, - AbpWeChatClaimTypes.NickName, - AbpWeChatClaimTypes.OpenId, - AbpWeChatClaimTypes.Privilege, - AbpWeChatClaimTypes.Province, - AbpWeChatClaimTypes.Sex, + { + AbpWeChatClaimTypes.AvatarUrl, + AbpWeChatClaimTypes.City, + AbpWeChatClaimTypes.Country, + AbpWeChatClaimTypes.NickName, + AbpWeChatClaimTypes.OpenId, + AbpWeChatClaimTypes.Privilege, + AbpWeChatClaimTypes.Province, + AbpWeChatClaimTypes.Sex, AbpWeChatClaimTypes.UnionId }; @@ -82,4 +82,4 @@ public class WeChatResourceDataSeeder : IWeChatResourceDataSeeder, ITransientDep ) ); } -} +} diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/IdentityServerMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/IdentityServerMigrationsEntityFrameworkCoreModule.cs index bac587696..0d2a5624f 100644 --- a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/IdentityServerMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/IdentityServerMigrationsEntityFrameworkCoreModule.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Identity.EntityFrameworkCore; using LINGYUN.Abp.IdentityServer.EntityFrameworkCore; @@ -7,9 +8,9 @@ using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; using LINGYUN.Abp.WeChat; using LINGYUN.Platform.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -29,7 +30,7 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore; typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpTextTemplatingEntityFrameworkCoreModule), typeof(PlatformEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpWeChatModule), typeof(AbpDataDbMigratorModule) )] @@ -45,7 +46,7 @@ public class IdentityServerMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/LY.MicroService.IdentityServer.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/LY.MicroService.IdentityServer.EntityFrameworkCore.csproj index 0513145cb..57e29bda3 100644 --- a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/LY.MicroService.IdentityServer.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/LY.MicroService.IdentityServer.EntityFrameworkCore.csproj @@ -14,7 +14,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -22,6 +21,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.Designer.cs b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.Designer.cs new file mode 100644 index 000000000..aa224a242 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.Designer.cs @@ -0,0 +1,2093 @@ +// +using System; +using LY.MicroService.IdentityServer.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(IdentityServerMigrationsDbContext))] + [Migration("20260420065028_Upgrade-Abp-Framework-To-10-0-2")] + partial class UpgradeAbpFrameworkTo1002 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Data") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Data"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Provider"); + + b.Property("RequestId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("RequestId"); + + b.ToTable("AbpGdprInfos", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("ReadyTime") + .HasColumnType("datetime(6)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpGdprRequests", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityClaimType", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("Description") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Regex") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("RegexDescription") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.ToTable("AbpClaimTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityLinkUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("SourceTenantId") + .HasColumnType("char(36)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("TargetTenantId") + .HasColumnType("char(36)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("SourceUserId", "SourceTenantId", "TargetUserId", "TargetTenantId") + .IsUnique(); + + b.ToTable("AbpLinkUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDefault") + .HasColumnType("tinyint(1)") + .HasColumnName("IsDefault"); + + b.Property("IsPublic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsPublic"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)") + .HasColumnName("IsStatic"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("NormalizedName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("NormalizedName"); + + b.ToTable("AbpRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleId"); + + b.ToTable("AbpRoleClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySecurityLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Action") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("ApplicationName") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("BrowserInfo") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ClientIpAddress") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CorrelationId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Identity") + .HasMaxLength(96) + .HasColumnType("varchar(96)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TenantName") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Action"); + + b.HasIndex("TenantId", "ApplicationName"); + + b.HasIndex("TenantId", "Identity"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSecurityLogs", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentitySession", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ClientId") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Device") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("DeviceInfo") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IpAddresses") + .HasMaxLength(2048) + .HasColumnType("varchar(2048)"); + + b.Property("LastAccessed") + .HasColumnType("datetime(6)"); + + b.Property("SessionId") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("SignedIn") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("Device"); + + b.HasIndex("SessionId"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AbpSessions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AccessFailedCount") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0) + .HasColumnName("AccessFailedCount"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Email") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Email"); + + b.Property("EmailConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("EmailConfirmed"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsActive") + .HasColumnType("tinyint(1)") + .HasColumnName("IsActive"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsExternal") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsExternal"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastPasswordChangeTime") + .HasColumnType("datetime(6)"); + + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + + b.Property("LockoutEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("LockoutEnabled"); + + b.Property("LockoutEnd") + .HasColumnType("datetime(6)"); + + b.Property("Name") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("NormalizedEmail") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedEmail"); + + b.Property("NormalizedUserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("NormalizedUserName"); + + b.Property("PasswordHash") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("PasswordHash"); + + b.Property("PhoneNumber") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("PhoneNumber"); + + b.Property("PhoneNumberConfirmed") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("PhoneNumberConfirmed"); + + b.Property("SecurityStamp") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("SecurityStamp"); + + b.Property("ShouldChangePasswordOnNextLogin") + .HasColumnType("tinyint(1)"); + + b.Property("Surname") + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Surname"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TwoFactorEnabled") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("TwoFactorEnabled"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("UserName"); + + b.HasKey("Id"); + + b.HasIndex("Email"); + + b.HasIndex("NormalizedEmail"); + + b.HasIndex("NormalizedUserName"); + + b.HasIndex("UserName"); + + b.ToTable("AbpUsers", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("ClaimType") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ClaimValue") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserDelegation", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("EndTime") + .HasColumnType("datetime(6)"); + + b.Property("SourceUserId") + .HasColumnType("char(36)"); + + b.Property("StartTime") + .HasColumnType("datetime(6)"); + + b.Property("TargetUserId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AbpUserDelegations", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("ProviderDisplayName") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("ProviderKey") + .IsRequired() + .HasMaxLength(196) + .HasColumnType("varchar(196)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "LoginProvider"); + + b.HasIndex("LoginProvider", "ProviderKey"); + + b.ToTable("AbpUserLogins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "UserId"); + + b.HasIndex("UserId", "OrganizationUnitId"); + + b.ToTable("AbpUserOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "RoleId"); + + b.HasIndex("RoleId", "UserId"); + + b.ToTable("AbpUserRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("LoginProvider") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Name") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Value") + .HasColumnType("longtext"); + + b.HasKey("UserId", "LoginProvider", "Name"); + + b.ToTable("AbpUserTokens", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(95) + .HasColumnType("varchar(95)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("EntityVersion") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Code"); + + b.HasIndex("ParentId"); + + b.ToTable("AbpOrganizationUnits", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.Property("OrganizationUnitId") + .HasColumnType("char(36)"); + + b.Property("RoleId") + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("OrganizationUnitId", "RoleId"); + + b.HasIndex("RoleId", "OrganizationUnitId"); + + b.ToTable("AbpOrganizationUnitRoles", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AllowedAccessTokenSigningAlgorithms") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiResources", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.Property("ApiResourceId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("ApiResourceId", "Type"); + + b.ToTable("IdentityServerApiResourceClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceProperty", b => + { + b.Property("ApiResourceId") + .HasColumnType("char(36)"); + + b.Property("Key") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("ApiResourceId", "Key", "Value"); + + b.ToTable("IdentityServerApiResourceProperties", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceScope", b => + { + b.Property("ApiResourceId") + .HasColumnType("char(36)"); + + b.Property("Scope") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("ApiResourceId", "Scope"); + + b.ToTable("IdentityServerApiResourceScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceSecret", b => + { + b.Property("ApiResourceId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.HasKey("ApiResourceId", "Type", "Value"); + + b.ToTable("IdentityServerApiResourceSecrets", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScope", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Emphasize") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerApiScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeClaim", b => + { + b.Property("ApiScopeId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("ApiScopeId", "Type"); + + b.ToTable("IdentityServerApiScopeClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeProperty", b => + { + b.Property("ApiScopeId") + .HasColumnType("char(36)"); + + b.Property("Key") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("ApiScopeId", "Key", "Value"); + + b.ToTable("IdentityServerApiScopeProperties", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AbsoluteRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenLifetime") + .HasColumnType("int"); + + b.Property("AccessTokenType") + .HasColumnType("int"); + + b.Property("AllowAccessTokensViaBrowser") + .HasColumnType("tinyint(1)"); + + b.Property("AllowOfflineAccess") + .HasColumnType("tinyint(1)"); + + b.Property("AllowPlainTextPkce") + .HasColumnType("tinyint(1)"); + + b.Property("AllowRememberConsent") + .HasColumnType("tinyint(1)"); + + b.Property("AllowedIdentityTokenSigningAlgorithms") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("AlwaysIncludeUserClaimsInIdToken") + .HasColumnType("tinyint(1)"); + + b.Property("AlwaysSendClientClaims") + .HasColumnType("tinyint(1)"); + + b.Property("AuthorizationCodeLifetime") + .HasColumnType("int"); + + b.Property("BackChannelLogoutSessionRequired") + .HasColumnType("tinyint(1)"); + + b.Property("BackChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("ClientClaimsPrefix") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ClientId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ClientName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ClientUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsentLifetime") + .HasColumnType("int"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DeviceCodeLifetime") + .HasColumnType("int"); + + b.Property("EnableLocalLogin") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrontChannelLogoutSessionRequired") + .HasColumnType("tinyint(1)"); + + b.Property("FrontChannelLogoutUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("IdentityTokenLifetime") + .HasColumnType("int"); + + b.Property("IncludeJwtId") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LogoUri") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("PairWiseSubjectSalt") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ProtocolType") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("RefreshTokenExpiration") + .HasColumnType("int"); + + b.Property("RefreshTokenUsage") + .HasColumnType("int"); + + b.Property("RequireClientSecret") + .HasColumnType("tinyint(1)"); + + b.Property("RequireConsent") + .HasColumnType("tinyint(1)"); + + b.Property("RequirePkce") + .HasColumnType("tinyint(1)"); + + b.Property("RequireRequestObject") + .HasColumnType("tinyint(1)"); + + b.Property("SlidingRefreshTokenLifetime") + .HasColumnType("int"); + + b.Property("UpdateAccessTokenClaimsOnRefresh") + .HasColumnType("tinyint(1)"); + + b.Property("UserCodeType") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("UserSsoLifetime") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ClientId"); + + b.ToTable("IdentityServerClients", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Origin") + .HasMaxLength(150) + .HasColumnType("varchar(150)"); + + b.HasKey("ClientId", "Origin"); + + b.ToTable("IdentityServerClientCorsOrigins", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("GrantType") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.HasKey("ClientId", "GrantType"); + + b.ToTable("IdentityServerClientGrantTypes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("ClientId", "Provider"); + + b.ToTable("IdentityServerClientIdPRestrictions", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("PostLogoutRedirectUri") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("ClientId", "PostLogoutRedirectUri"); + + b.ToTable("IdentityServerClientPostLogoutRedirectUris", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Key") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("ClientId", "Key", "Value"); + + b.ToTable("IdentityServerClientProperties", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("RedirectUri") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("ClientId", "RedirectUri"); + + b.ToTable("IdentityServerClientRedirectUris", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Scope") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("ClientId", "Scope"); + + b.ToTable("IdentityServerClientScopes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.Property("ClientId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.Property("Description") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.HasKey("ClientId", "Type", "Value"); + + b.ToTable("IdentityServerClientSecrets", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Devices.DeviceFlowCodes", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ClientId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Data") + .IsRequired() + .HasMaxLength(10000) + .HasColumnType("varchar(10000)"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("DeviceCode") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("SubjectId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("UserCode") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("Id"); + + b.HasIndex("DeviceCode") + .IsUnique(); + + b.HasIndex("Expiration"); + + b.HasIndex("UserCode"); + + b.ToTable("IdentityServerDeviceFlowCodes", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Grants.PersistedGrant", b => + { + b.Property("Key") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ClientId") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ConsumedTime") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)"); + + b.Property("Data") + .IsRequired() + .HasMaxLength(10000) + .HasColumnType("varchar(10000)"); + + b.Property("Description") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Expiration") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Id") + .HasColumnType("char(36)"); + + b.Property("SessionId") + .HasMaxLength(100) + .HasColumnType("varchar(100)"); + + b.Property("SubjectId") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.HasKey("Key"); + + b.HasIndex("Expiration"); + + b.HasIndex("SubjectId", "ClientId", "Type"); + + b.HasIndex("SubjectId", "SessionId", "Type"); + + b.ToTable("IdentityServerPersistedGrants", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)"); + + b.Property("DisplayName") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Emphasize") + .HasColumnType("tinyint(1)"); + + b.Property("Enabled") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Required") + .HasColumnType("tinyint(1)"); + + b.Property("ShowInDiscoveryDocument") + .HasColumnType("tinyint(1)"); + + b.HasKey("Id"); + + b.ToTable("IdentityServerIdentityResources", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResourceClaim", b => + { + b.Property("IdentityResourceId") + .HasColumnType("char(36)"); + + b.Property("Type") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.HasKey("IdentityResourceId", "Type"); + + b.ToTable("IdentityServerIdentityResourceClaims", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResourceProperty", b => + { + b.Property("IdentityResourceId") + .HasColumnType("char(36)"); + + b.Property("Key") + .HasMaxLength(250) + .HasColumnType("varchar(250)"); + + b.Property("Value") + .HasMaxLength(300) + .HasColumnType("varchar(300)"); + + b.HasKey("IdentityResourceId", "Key", "Value"); + + b.ToTable("IdentityServerIdentityResourceProperties", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprInfo", b => + { + b.HasOne("LINGYUN.Abp.Gdpr.GdprRequest", null) + .WithMany("Infos") + .HasForeignKey("RequestId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRoleClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany("Claims") + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserClaim", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Claims") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserLogin", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Logins") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserOrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("OrganizationUnits") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => + { + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Roles") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserToken", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Tokens") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany() + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnitRole", b => + { + b.HasOne("Volo.Abp.Identity.OrganizationUnit", null) + .WithMany("Roles") + .HasForeignKey("OrganizationUnitId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("Volo.Abp.Identity.IdentityRole", null) + .WithMany() + .HasForeignKey("RoleId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("UserClaims") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Properties") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Scopes") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResourceSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiResources.ApiResource", null) + .WithMany("Secrets") + .HasForeignKey("ApiResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiScopes.ApiScope", null) + .WithMany("UserClaims") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScopeProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.ApiScopes.ApiScope", null) + .WithMany("Properties") + .HasForeignKey("ApiScopeId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Claims") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientCorsOrigin", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedCorsOrigins") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientGrantType", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedGrantTypes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientIdPRestriction", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("IdentityProviderRestrictions") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientPostLogoutRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("PostLogoutRedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("Properties") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientRedirectUri", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("RedirectUris") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientScope", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("AllowedScopes") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.ClientSecret", b => + { + b.HasOne("Volo.Abp.IdentityServer.Clients.Client", null) + .WithMany("ClientSecrets") + .HasForeignKey("ClientId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResourceClaim", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("UserClaims") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResourceProperty", b => + { + b.HasOne("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", null) + .WithMany("Properties") + .HasForeignKey("IdentityResourceId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Abp.Gdpr.GdprRequest", b => + { + b.Navigation("Infos"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityRole", b => + { + b.Navigation("Claims"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUser", b => + { + b.Navigation("Claims"); + + b.Navigation("Logins"); + + b.Navigation("OrganizationUnits"); + + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + + b.Navigation("Roles"); + + b.Navigation("Tokens"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.OrganizationUnit", b => + { + b.Navigation("Roles"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiResources.ApiResource", b => + { + b.Navigation("Properties"); + + b.Navigation("Scopes"); + + b.Navigation("Secrets"); + + b.Navigation("UserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.ApiScopes.ApiScope", b => + { + b.Navigation("Properties"); + + b.Navigation("UserClaims"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.Clients.Client", b => + { + b.Navigation("AllowedCorsOrigins"); + + b.Navigation("AllowedGrantTypes"); + + b.Navigation("AllowedScopes"); + + b.Navigation("Claims"); + + b.Navigation("ClientSecrets"); + + b.Navigation("IdentityProviderRestrictions"); + + b.Navigation("PostLogoutRedirectUris"); + + b.Navigation("Properties"); + + b.Navigation("RedirectUris"); + }); + + modelBuilder.Entity("Volo.Abp.IdentityServer.IdentityResources.IdentityResource", b => + { + b.Navigation("Properties"); + + b.Navigation("UserClaims"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.cs b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.cs new file mode 100644 index 000000000..487388862 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/20260420065028_Upgrade-Abp-Framework-To-10-0-2.cs @@ -0,0 +1,120 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1002 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AddColumn( + name: "LastSignInTime", + table: "AbpUsers", + type: "datetime(6)", + nullable: true); + + migrationBuilder.AddColumn( + name: "Leaved", + table: "AbpUsers", + type: "tinyint(1)", + nullable: false, + defaultValue: false); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(256)", + maxLength: 256, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(64)", + oldMaxLength: 64, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasskeys", + columns: table => new + { + CredentialId = table.Column(type: "varbinary(1024)", maxLength: 1024, nullable: false), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Data = table.Column(type: "json", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasskeys", x => x.CredentialId); + table.ForeignKey( + name: "FK_AbpUserPasskeys_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpUserPasswordHistories", + columns: table => new + { + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + Password = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + CreatedAt = table.Column(type: "datetime(6)", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("PK_AbpUserPasswordHistories", x => new { x.UserId, x.Password }); + table.ForeignKey( + name: "FK_AbpUserPasswordHistories_AbpUsers_UserId", + column: x => x.UserId, + principalTable: "AbpUsers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpUserPasskeys_UserId", + table: "AbpUserPasskeys", + column: "UserId"); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpUserPasskeys"); + + migrationBuilder.DropTable( + name: "AbpUserPasswordHistories"); + + migrationBuilder.DropColumn( + name: "LastSignInTime", + table: "AbpUsers"); + + migrationBuilder.DropColumn( + name: "Leaved", + table: "AbpUsers"); + + migrationBuilder.AlterColumn( + name: "DeviceInfo", + table: "AbpSessions", + type: "varchar(64)", + maxLength: 64, + nullable: true, + oldClrType: typeof(string), + oldType: "varchar(256)", + oldMaxLength: 256, + oldNullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + .OldAnnotation("MySql:CharSet", "utf8mb4"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/IdentityServerMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/IdentityServerMigrationsDbContextModelSnapshot.cs index 8a77f3f6c..a24a232a0 100644 --- a/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/IdentityServerMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.EntityFrameworkCore/Migrations/IdentityServerMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "9.0.2") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -344,8 +344,8 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations .HasColumnType("varchar(64)"); b.Property("DeviceInfo") - .HasMaxLength(64) - .HasColumnType("varchar(64)"); + .HasMaxLength(256) + .HasColumnType("varchar(256)"); b.Property("ExtraProperties") .HasColumnType("longtext") @@ -466,6 +466,15 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations b.Property("LastPasswordChangeTime") .HasColumnType("datetime(6)"); + b.Property("LastSignInTime") + .HasColumnType("datetime(6)"); + + b.Property("Leaved") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("Leaved"); + b.Property("LockoutEnabled") .ValueGeneratedOnAdd() .HasColumnType("tinyint(1)") @@ -662,6 +671,47 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations b.ToTable("AbpUserOrganizationUnits", (string)null); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.Property("CredentialId") + .HasMaxLength(1024) + .HasColumnType("varbinary(1024)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("CredentialId"); + + b.HasIndex("UserId"); + + b.ToTable("AbpUserPasskeys", (string)null); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("Password") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("UserId", "Password"); + + b.ToTable("AbpUserPasswordHistories", (string)null); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.Property("UserId") @@ -1702,6 +1752,62 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations .IsRequired(); }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasskey", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("Passkeys") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.OwnsOne("Volo.Abp.Identity.IdentityPasskeyData", "Data", b1 => + { + b1.Property("IdentityUserPasskeyCredentialId"); + + b1.Property("AttestationObject"); + + b1.Property("ClientDataJson"); + + b1.Property("CreatedAt"); + + b1.Property("IsBackedUp"); + + b1.Property("IsBackupEligible"); + + b1.Property("IsUserVerified"); + + b1.Property("Name"); + + b1.Property("PublicKey"); + + b1.Property("SignCount"); + + b1.PrimitiveCollection("Transports"); + + b1.HasKey("IdentityUserPasskeyCredentialId"); + + b1.ToTable("AbpUserPasskeys"); + + b1 + .ToJson("Data") + .HasColumnType("json"); + + b1.WithOwner() + .HasForeignKey("IdentityUserPasskeyCredentialId"); + }); + + b.Navigation("Data"); + }); + + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserPasswordHistory", b => + { + b.HasOne("Volo.Abp.Identity.IdentityUser", null) + .WithMany("PasswordHistories") + .HasForeignKey("UserId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("Volo.Abp.Identity.IdentityUserRole", b => { b.HasOne("Volo.Abp.Identity.IdentityRole", null) @@ -1919,6 +2025,10 @@ namespace LY.MicroService.IdentityServer.EntityFrameworkCore.Migrations b.Navigation("OrganizationUnits"); + b.Navigation("Passkeys"); + + b.Navigation("PasswordHistories"); + b.Navigation("Roles"); b.Navigation("Tokens"); diff --git a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LY.MicroService.LocalizationManagement.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LY.MicroService.LocalizationManagement.EntityFrameworkCore.csproj index 26839e020..81da03a1c 100644 --- a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LY.MicroService.LocalizationManagement.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LY.MicroService.LocalizationManagement.EntityFrameworkCore.csproj @@ -14,7 +14,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -22,6 +21,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementMigrationsEntityFrameworkCoreModule.cs index 8f8b0b261..906dc56ad 100644 --- a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementMigrationsEntityFrameworkCoreModule.cs @@ -1,9 +1,10 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -17,7 +18,7 @@ namespace LY.MicroService.LocalizationManagement.EntityFrameworkCore; typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpDataDbMigratorModule) )] public class LocalizationManagementMigrationsEntityFrameworkCoreModule : AbpModule @@ -32,7 +33,7 @@ public class LocalizationManagementMigrationsEntityFrameworkCoreModule : AbpModu mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/LY.MicroService.Platform.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/LY.MicroService.Platform.EntityFrameworkCore.csproj index b6c20e51a..3118e67c9 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/LY.MicroService.Platform.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/LY.MicroService.Platform.EntityFrameworkCore.csproj @@ -14,7 +14,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -22,6 +21,9 @@ + + + diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationEventHandler.cs index 600cd5278..79e3ffa52 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationEventHandler.cs @@ -10,7 +10,6 @@ using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.EntityFrameworkCore.Migrations; using Volo.Abp.EventBus.Distributed; -using Volo.Abp.Features; using Volo.Abp.MultiTenancy; using Volo.Abp.Uow; @@ -19,8 +18,7 @@ public class PlatformDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase, IDistributedEventHandler { - protected IDataSeeder DataSeeder { get; } - protected IFeatureChecker FeatureChecker { get; } + protected PlatformServiceDataSeeder DataSeeder { get; } protected IConfiguration Configuration { get; } public PlatformDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -29,23 +27,32 @@ public class PlatformDbMigrationEventHandler : IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - IDataSeeder dataSeeder, - IFeatureChecker featureChecker, + PlatformServiceDataSeeder dataSeeder, IConfiguration configuration) : base( ConnectionStringNameAttribute.GetConnStringName(), currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { DataSeeder = dataSeeder; - FeatureChecker = featureChecker; Configuration = configuration; } - protected async override Task SeedAsync(Guid? tenantId) + protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - using (CurrentTenant.Change(tenantId)) + using (CurrentTenant.Change(eventData.Id)) { - await DataSeeder.SeedAsync(tenantId); + using (var uow = UnitOfWorkManager.Begin(requiresNew: true)) + { + var seedContext = new DataSeedContext(eventData.Id); + foreach (var prop in eventData.Properties) + { + seedContext.WithProperty(prop.Key, prop.Value); + } + + await DataSeeder.SeedAsync(seedContext); + + await uow.CompleteAsync(); + } } } diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsEntityFrameworkCoreModule.cs index 4734fb0aa..c9d97e1c1 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsEntityFrameworkCoreModule.cs @@ -1,8 +1,12 @@ -using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; +using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Saas.EntityFrameworkCore; +using LINGYUN.Abp.UI.Navigation.VueVbenAdmin5; +using LINGYUN.Platform.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -11,12 +15,14 @@ using Volo.Abp.SettingManagement.EntityFrameworkCore; namespace LY.MicroService.Platform.EntityFrameworkCore; [DependsOn( + typeof(AbpUINavigationVueVbenAdmin5Module), typeof(AbpSaasEntityFrameworkCoreModule), - typeof(LINGYUN.Platform.EntityFrameworkCore.PlatformEntityFrameworkCoreModule), + typeof(PlatformEntityFrameworkCoreModule), + typeof(AbpBlobManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpDataDbMigratorModule) )] public class PlatformMigrationsEntityFrameworkCoreModule : AbpModule @@ -31,7 +37,7 @@ public class PlatformMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformServiceDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformServiceDataSeeder.cs new file mode 100644 index 000000000..d7cfd625a --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformServiceDataSeeder.cs @@ -0,0 +1,43 @@ +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.UI.Navigation; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace LY.MicroService.Platform.EntityFrameworkCore; + +public class PlatformServiceDataSeeder : ITransientDependency +{ + protected NavigationDataSeeder NavigationDataSeeder { get; } + protected IBlobDataSeeder BlobDataSeeder { get; } + protected ICurrentTenant CurrentTenant { get; } + public PlatformServiceDataSeeder( + NavigationDataSeeder navigationDataSeeder, + ICurrentTenant currentTenant, + IBlobDataSeeder blobDataSeeder) + { + NavigationDataSeeder = navigationDataSeeder; + CurrentTenant = currentTenant; + BlobDataSeeder = blobDataSeeder; + } + + public async virtual Task SeedAsync(DataSeedContext context) + { + using (CurrentTenant.Change(context.TenantId)) + { + await SeedNavigationAsync(); + await SeedBlobContainerAsync(); + } + } + + private async Task SeedNavigationAsync() + { + await NavigationDataSeeder.SeedAsync(CurrentTenant.Id); + } + + private async Task SeedBlobContainerAsync() + { + await BlobDataSeeder.SeedAsync(CurrentTenant.Id); + } +} diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/LY.MicroService.RealtimeMessage.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/LY.MicroService.RealtimeMessage.EntityFrameworkCore.csproj index 3f9feef11..e4bc4ba04 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/LY.MicroService.RealtimeMessage.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/LY.MicroService.RealtimeMessage.EntityFrameworkCore.csproj @@ -14,7 +14,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -22,6 +21,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.Designer.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.Designer.cs new file mode 100644 index 000000000..bbbdece35 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.Designer.cs @@ -0,0 +1,814 @@ +// +using System; +using LY.MicroService.RealtimeMessage.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(RealtimeMessageMigrationsDbContext))] + [Migration("20260420065252_Upgrade-Abp-Framework-To-10-0-2")] + partial class UpgradeAbpFrameworkTo1002 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Age") + .HasColumnType("int"); + + b.Property("AvatarUrl") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Birthday") + .HasColumnType("datetime(6)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastOnlineTime") + .HasColumnType("datetime(6)"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("Sex") + .HasColumnType("int"); + + b.Property("Sign") + .HasMaxLength(30) + .HasColumnType("varchar(30)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatFriend", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Black") + .HasColumnType("tinyint(1)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("DontDisturb") + .HasColumnType("tinyint(1)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FrientId") + .HasColumnType("char(36)"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("RemarkName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SpecialFocus") + .HasColumnType("tinyint(1)"); + + b.Property("Status") + .HasColumnType("tinyint unsigned"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "FrientId"); + + b.ToTable("AppUserChatFriends", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserChatSetting", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("AllowAddFriend") + .HasColumnType("tinyint(1)"); + + b.Property("AllowAnonymous") + .HasColumnType("tinyint(1)"); + + b.Property("AllowReceiveMessage") + .HasColumnType("tinyint(1)"); + + b.Property("AllowSendMessage") + .HasColumnType("tinyint(1)"); + + b.Property("RequireAddFriendValition") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserChatSettings", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Chat.UserMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("ReceiveUserId") + .HasColumnType("char(36)"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "ReceiveUserId"); + + b.ToTable("AppUserMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.ChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Address") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("AdminUserId") + .HasColumnType("char(36)"); + + b.Property("AllowAnonymous") + .HasColumnType("tinyint(1)"); + + b.Property("AllowSendMessage") + .HasColumnType("tinyint(1)"); + + b.Property("AvatarUrl") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Description") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MaxUserCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(20) + .HasColumnType("varchar(20)"); + + b.Property("Notice") + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Tag") + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AppChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupChatBlack", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("ShieldUserId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupChatBlacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.GroupMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(1048576) + .HasColumnType("longtext"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("MessageId") + .HasColumnType("bigint"); + + b.Property("SendUserName") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("State") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId"); + + b.ToTable("AppGroupMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserChatGroup", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("GroupId") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "GroupId", "UserId"); + + b.ToTable("AppUserChatGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.MessageService.Groups.UserGroupCard", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsAdmin") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("NickName") + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("SilenceEnd") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId"); + + b.ToTable("AppUserGroupCards", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.Notification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("NotificationTypeName") + .IsRequired() + .HasMaxLength(512) + .HasColumnType("varchar(512)"); + + b.Property("Severity") + .HasColumnType("tinyint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName"); + + b.ToTable("AppNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionGroupRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("tinyint(1)"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitionGroups", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationDefinitionRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AllowSubscriptionToClients") + .HasColumnType("tinyint(1)"); + + b.Property("ContentType") + .ValueGeneratedOnAdd() + .HasColumnType("int") + .HasDefaultValue(0); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("DisplayName") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("GroupName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("NotificationLifetime") + .HasColumnType("int"); + + b.Property("NotificationType") + .HasColumnType("int"); + + b.Property("Providers") + .HasMaxLength(200) + .HasColumnType("varchar(200)"); + + b.Property("Template") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.HasKey("Id"); + + b.ToTable("AppNotificationDefinitions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("ReadStatus") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationId") + .HasDatabaseName("IX_Tenant_User_Notification_Id"); + + b.ToTable("AppUserNotifications", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserSubscribe", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "UserId", "NotificationName") + .IsUnique() + .HasDatabaseName("IX_Tenant_User_Notification_Name"); + + b.ToTable("AppUserSubscribes", (string)null); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.cs new file mode 100644 index 000000000..acb8bf8b7 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/20260420065252_Upgrade-Abp-Framework-To-10-0-2.cs @@ -0,0 +1,54 @@ +using System; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1002 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AppNotificationSendRecords", + columns: table => new + { + Id = table.Column(type: "bigint", nullable: false) + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Provider = table.Column(type: "varchar(50)", maxLength: 50, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + SendTime = table.Column(type: "datetime(6)", nullable: false), + UserId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + UserName = table.Column(type: "varchar(128)", maxLength: 128, nullable: false, defaultValue: "/") + .Annotation("MySql:CharSet", "utf8mb4"), + NotificationId = table.Column(type: "bigint", nullable: false), + NotificationName = table.Column(type: "varchar(255)", maxLength: 255, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + State = table.Column(type: "int", nullable: false), + Reason = table.Column(type: "varchar(255)", maxLength: 255, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4") + }, + constraints: table => + { + table.PrimaryKey("PK_AppNotificationSendRecords", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_Tenant_Send_Notification_Name", + table: "AppNotificationSendRecords", + columns: new[] { "TenantId", "NotificationName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AppNotificationSendRecords"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/RealtimeMessageMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/RealtimeMessageMigrationsDbContextModelSnapshot.cs index 921e1ec64..52c372d3a 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/RealtimeMessageMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/Migrations/RealtimeMessageMigrationsDbContextModelSnapshot.cs @@ -19,7 +19,7 @@ namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "8.0.4") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); @@ -684,6 +684,59 @@ namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore.Migrations b.ToTable("AppNotificationDefinitions", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.Notifications.NotificationSendRecord", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("NotificationId") + .HasColumnType("bigint"); + + b.Property("NotificationName") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(50) + .HasColumnType("varchar(50)"); + + b.Property("Reason") + .HasMaxLength(255) + .HasColumnType("varchar(255)"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("State") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.Property("UserName") + .IsRequired() + .ValueGeneratedOnAdd() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasDefaultValue("/"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "NotificationName") + .HasDatabaseName("IX_Tenant_Send_Notification_Name"); + + b.ToTable("AppNotificationSendRecords", (string)null); + }); + modelBuilder.Entity("LINGYUN.Abp.Notifications.UserNotification", b => { b.Property("Id") diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationEventHandler.cs index afde668d5..33e12ebf6 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationEventHandler.cs @@ -36,11 +36,6 @@ public class RealtimeMessageDbMigrationEventHandler : EfCoreDatabaseMigrationEve protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - if (!schemaMigrated) - { - return; - } - using (CurrentTenant.Change(eventData.Id)) { await SendNotificationAsync(eventData); diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageMigrationsEntityFrameworkCoreModule.cs index d9b4a40bc..eac9c90b6 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageMigrationsEntityFrameworkCoreModule.cs @@ -1,11 +1,12 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.MessageService.EntityFrameworkCore; using LINGYUN.Abp.Notifications.EntityFrameworkCore; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TextTemplating.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -21,7 +22,7 @@ namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore; typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpDataDbMigratorModule) )] public class RealtimeMessageMigrationsEntityFrameworkCoreModule : AbpModule @@ -36,7 +37,7 @@ public class RealtimeMessageMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/LY.MicroService.TaskManagement.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/LY.MicroService.TaskManagement.EntityFrameworkCore.csproj index a42349b61..1b1ba6ab7 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/LY.MicroService.TaskManagement.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/LY.MicroService.TaskManagement.EntityFrameworkCore.csproj @@ -13,7 +13,6 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - @@ -21,6 +20,7 @@ + diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.Designer.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.Designer.cs new file mode 100644 index 000000000..ab63c4785 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.Designer.cs @@ -0,0 +1,282 @@ +// +using System; +using LY.MicroService.TaskManagement.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.TaskManagement.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(TaskManagementMigrationsDbContext))] + [Migration("20260420073543_Upgrade-Abp-Framework-To-10-0-2")] + partial class UpgradeAbpFrameworkTo1002 + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("JobId") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("JobId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.Property("Paramters") + .HasColumnType("longtext") + .HasColumnName("Paramters"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("TK_BackgroundJobActions", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobInfo", b => + { + b.Property("Id") + .HasColumnType("varchar(255)"); + + b.Property("Args") + .HasColumnType("longtext") + .HasColumnName("Args"); + + b.Property("BeginTime") + .HasColumnType("datetime(6)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("Cron") + .HasMaxLength(50) + .HasColumnType("varchar(50)") + .HasColumnName("Cron"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Description"); + + b.Property("EndTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Group") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Group"); + + b.Property("Interval") + .HasColumnType("int"); + + b.Property("IsAbandoned") + .HasColumnType("tinyint(1)"); + + b.Property("IsEnabled") + .HasColumnType("tinyint(1)"); + + b.Property("JobType") + .HasColumnType("int"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LastRunTime") + .HasColumnType("datetime(6)"); + + b.Property("LockTimeOut") + .HasColumnType("int"); + + b.Property("MaxCount") + .HasColumnType("int"); + + b.Property("MaxTryCount") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Name"); + + b.Property("NextRunTime") + .HasColumnType("datetime(6)"); + + b.Property("NodeName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("NodeName"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Result") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Result"); + + b.Property("Source") + .HasColumnType("int"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("TriggerCount") + .HasColumnType("int"); + + b.Property("TryCount") + .HasColumnType("int"); + + b.Property("Type") + .IsRequired() + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Type"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Group"); + + b.ToTable("TK_BackgroundJobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobLog", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Exception") + .HasMaxLength(2000) + .HasColumnType("varchar(2000)") + .HasColumnName("Exception"); + + b.Property("JobGroup") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("JobGroup"); + + b.Property("JobId") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("JobId"); + + b.Property("JobName") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("JobName"); + + b.Property("JobType") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("JobType"); + + b.Property("Message") + .HasMaxLength(1000) + .HasColumnType("varchar(1000)") + .HasColumnName("Message"); + + b.Property("RunTime") + .HasColumnType("datetime(6)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("JobGroup", "JobName"); + + b.ToTable("TK_BackgroundJobLogs", (string)null); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.cs new file mode 100644 index 000000000..e34b40fc2 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/20260420073543_Upgrade-Abp-Framework-To-10-0-2.cs @@ -0,0 +1,37 @@ +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.TaskManagement.EntityFrameworkCore.Migrations +{ + /// + public partial class UpgradeAbpFrameworkTo1002 : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Id", + table: "TK_BackgroundJobLogs", + type: "bigint", + nullable: false, + oldClrType: typeof(long), + oldType: "bigint") + .Annotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterColumn( + name: "Id", + table: "TK_BackgroundJobLogs", + type: "bigint", + nullable: false, + oldClrType: typeof(long), + oldType: "bigint") + .OldAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/TaskManagementMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/TaskManagementMigrationsDbContextModelSnapshot.cs index 48f2748f9..17c251396 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/TaskManagementMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/Migrations/TaskManagementMigrationsDbContextModelSnapshot.cs @@ -3,6 +3,7 @@ using System; using LY.MicroService.TaskManagement.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; using Microsoft.EntityFrameworkCore.Storage.ValueConversion; using Volo.Abp.EntityFrameworkCore; @@ -18,9 +19,11 @@ namespace LY.MicroService.TaskManagement.EntityFrameworkCore.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "7.0.10") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + modelBuilder.Entity("LINGYUN.Abp.TaskManagement.BackgroundJobAction", b => { b.Property("Id") @@ -225,6 +228,8 @@ namespace LY.MicroService.TaskManagement.EntityFrameworkCore.Migrations .ValueGeneratedOnAdd() .HasColumnType("bigint"); + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + b.Property("Exception") .HasMaxLength(2000) .HasColumnType("varchar(2000)") diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs new file mode 100644 index 000000000..b9c5fa475 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs @@ -0,0 +1,140 @@ +using LINGYUN.Abp.BackgroundTasks; +using LINGYUN.Abp.BackgroundTasks.Internal; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp.Data; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace LY.MicroService.TaskManagement.EntityFrameworkCore; + +public class TaskManagementDataSeeder : ITransientDependency +{ + protected AbpBackgroundTasksOptions Options { get; } + protected IJobStore JobStore { get; } + protected IJobScheduler JobScheduler { get; } + protected ICurrentTenant CurrentTenant { get; } + + public TaskManagementDataSeeder( + IOptions options, + IJobStore jobStore, + IJobScheduler jobScheduler, + ICurrentTenant currentTenant) + { + Options = options.Value; + JobStore = jobStore; + JobScheduler = jobScheduler; + CurrentTenant = currentTenant; + } + + public async virtual Task SeedAsync(DataSeedContext context) + { + if (context.TenantId.HasValue) + { + using (CurrentTenant.Change(context.TenantId)) + { + await QueueBackgroundJobAsync(context.TenantId.Value); + } + } + } + + public async virtual Task RemoveSeedAsync(Guid tenantId) + { + using (CurrentTenant.Change(tenantId)) + { + var pollingJob = BuildPollingJobInfo(tenantId); + await JobScheduler.RemoveAsync(pollingJob); + await JobStore.RemoveAsync(pollingJob.Id); + + var cleaningJob = BuildCleaningJobInfo(tenantId); + await JobScheduler.RemoveAsync(cleaningJob); + await JobStore.RemoveAsync(cleaningJob.Id); + + var checkingJob = BuildCheckingJobInfo(tenantId); + await JobScheduler.RemoveAsync(checkingJob); + await JobStore.RemoveAsync(checkingJob.Id); + } + } + + protected async virtual Task QueueBackgroundJobAsync(Guid tenantId) + { + var pollingJob = BuildPollingJobInfo(tenantId); + await JobStore.StoreAsync(pollingJob); + await JobScheduler.QueueAsync(pollingJob); + + var cleaningJob = BuildCleaningJobInfo(tenantId); + await JobStore.StoreAsync(cleaningJob); + await JobScheduler.QueueAsync(cleaningJob); + + var checkingJob = BuildCheckingJobInfo(tenantId); + await JobStore.StoreAsync(checkingJob); + await JobScheduler.QueueAsync(checkingJob); + } + + protected virtual JobInfo BuildPollingJobInfo(Guid tenantId) + { + return new JobInfo + { + Id = tenantId.ToString() + "_Polling", + Name = nameof(BackgroundPollingJob), + Group = "Polling", + Description = "Polling tasks to be executed", + Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, + Status = JobStatus.Running, + BeginTime = DateTime.Now, + CreationTime = DateTime.Now, + Cron = Options.JobFetchCronExpression, + JobType = JobType.Period, + Priority = JobPriority.High, + Source = JobSource.System, + LockTimeOut = Options.JobFetchLockTimeOut, + TenantId = tenantId, + Type = typeof(BackgroundPollingJob).AssemblyQualifiedName, + }; + } + + protected virtual JobInfo BuildCleaningJobInfo(Guid tenantId) + { + return new JobInfo + { + Id = tenantId.ToString() + "_Cleaning", + Name = nameof(BackgroundCleaningJob), + Group = "Cleaning", + Description = "Cleaning tasks to be executed", + Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, + Status = JobStatus.Running, + BeginTime = DateTime.Now, + CreationTime = DateTime.Now, + Cron = Options.JobCleanCronExpression, + JobType = JobType.Period, + Priority = JobPriority.High, + Source = JobSource.System, + TenantId = tenantId, + Type = typeof(BackgroundCleaningJob).AssemblyQualifiedName, + }; + } + + protected virtual JobInfo BuildCheckingJobInfo(Guid tenantId) + { + return new JobInfo + { + Id = tenantId.ToString() + "_Checking", + Name = nameof(BackgroundCheckingJob), + Group = "Checking", + Description = "Checking tasks to be executed", + Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, + Status = JobStatus.Running, + BeginTime = DateTime.Now, + CreationTime = DateTime.Now, + Cron = Options.JobCheckCronExpression, + LockTimeOut = Options.JobCheckLockTimeOut, + JobType = JobType.Period, + Priority = JobPriority.High, + Source = JobSource.System, + TenantId = tenantId, + Type = typeof(BackgroundCheckingJob).AssemblyQualifiedName, + }; + } +} diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs index 234c3c788..9c5f25def 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs @@ -1,11 +1,7 @@ -using LINGYUN.Abp.BackgroundTasks; -using LINGYUN.Abp.BackgroundTasks.Internal; -using LINGYUN.Abp.Saas.Tenants; +using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; using System.Threading.Tasks; +using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore.Migrations; @@ -19,9 +15,7 @@ public class TaskManagementDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase, IDistributedEventHandler> { - protected AbpBackgroundTasksOptions Options { get; } - protected IJobStore JobStore { get; } - protected IJobScheduler JobScheduler { get; } + protected TaskManagementDataSeeder DataSeeder { get; } public TaskManagementDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -30,119 +24,30 @@ public class TaskManagementDbMigrationEventHandler : IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - IJobStore jobStore, - IJobScheduler jobScheduler, - IOptions options) + TaskManagementDataSeeder dataSeeder) : base("TaskManagementDbMigrator", currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { - JobStore = jobStore; - JobScheduler = jobScheduler; - Options = options.Value; + DataSeeder = dataSeeder; } public async Task HandleEventAsync(EntityDeletedEto eventData) { // 租户删除时移除轮询作业 - var pollingJob = BuildPollingJobInfo(eventData.Entity.Id, eventData.Entity.Name); - await JobScheduler.RemoveAsync(pollingJob); - await JobStore.RemoveAsync(pollingJob.Id); - - var cleaningJob = BuildCleaningJobInfo(eventData.Entity.Id, eventData.Entity.Name); - await JobScheduler.RemoveAsync(cleaningJob); - await JobStore.RemoveAsync(cleaningJob.Id); - - var checkingJob = BuildCheckingJobInfo(eventData.Entity.Id, eventData.Entity.Name); - await JobScheduler.RemoveAsync(checkingJob); - await JobStore.RemoveAsync(checkingJob.Id); + await DataSeeder.RemoveSeedAsync(eventData.Entity.Id); } protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) { - if (!schemaMigrated) + // 新租户数据种子 + var context = new DataSeedContext(eventData.Id); + if (eventData.Properties != null) { - return; + foreach (var property in eventData.Properties) + { + context.WithProperty(property.Key, property.Value); + } } - await QueueBackgroundJobAsync(eventData); - } - - protected async virtual Task QueueBackgroundJobAsync(TenantCreatedEto eventData) - { - var pollingJob = BuildPollingJobInfo(eventData.Id, eventData.Name); - await JobStore.StoreAsync(pollingJob); - await JobScheduler.QueueAsync(pollingJob); - - var cleaningJob = BuildCleaningJobInfo(eventData.Id, eventData.Name); - await JobStore.StoreAsync(cleaningJob); - await JobScheduler.QueueAsync(cleaningJob); - - var checkingJob = BuildCheckingJobInfo(eventData.Id, eventData.Name); - await JobStore.StoreAsync(checkingJob); - await JobScheduler.QueueAsync(checkingJob); - } - - protected virtual JobInfo BuildPollingJobInfo(Guid tenantId, string tenantName) - { - return new JobInfo - { - Id = tenantId.ToString() + "_Polling", - Name = nameof(BackgroundPollingJob), - Group = "Polling", - Description = "Polling tasks to be executed", - Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, - Status = JobStatus.Running, - BeginTime = DateTime.Now, - CreationTime = DateTime.Now, - Cron = Options.JobFetchCronExpression, - JobType = JobType.Period, - Priority = JobPriority.High, - Source = JobSource.System, - LockTimeOut = Options.JobFetchLockTimeOut, - TenantId = tenantId, - Type = typeof(BackgroundPollingJob).AssemblyQualifiedName, - }; - } - - protected virtual JobInfo BuildCleaningJobInfo(Guid tenantId, string tenantName) - { - return new JobInfo - { - Id = tenantId.ToString() + "_Cleaning", - Name = nameof(BackgroundCleaningJob), - Group = "Cleaning", - Description = "Cleaning tasks to be executed", - Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, - Status = JobStatus.Running, - BeginTime = DateTime.Now, - CreationTime = DateTime.Now, - Cron = Options.JobCleanCronExpression, - JobType = JobType.Period, - Priority = JobPriority.High, - Source = JobSource.System, - TenantId = tenantId, - Type = typeof(BackgroundCleaningJob).AssemblyQualifiedName, - }; - } - - protected virtual JobInfo BuildCheckingJobInfo(Guid tenantId, string tenantName) - { - return new JobInfo - { - Id = tenantId.ToString() + "_Checking", - Name = nameof(BackgroundCheckingJob), - Group = "Checking", - Description = "Checking tasks to be executed", - Args = new Dictionary() { { nameof(JobInfo.TenantId), tenantId } }, - Status = JobStatus.Running, - BeginTime = DateTime.Now, - CreationTime = DateTime.Now, - Cron = Options.JobCheckCronExpression, - LockTimeOut = Options.JobCheckLockTimeOut, - JobType = JobType.Period, - Priority = JobPriority.High, - Source = JobSource.System, - TenantId = tenantId, - Type = typeof(BackgroundCheckingJob).AssemblyQualifiedName, - }; + await DataSeeder.SeedAsync(context); } } diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationService.cs index 35684f356..02e804c9b 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationService.cs @@ -1,9 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; -using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; @@ -15,14 +12,7 @@ namespace LY.MicroService.TaskManagement.EntityFrameworkCore; public class TaskManagementDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } - public TaskManagementDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -33,26 +23,5 @@ public class TaskManagementDbMigrationService : EfCoreRuntimeDbMigratorBase(), unitOfWorkManager, serviceProvider, currentTenant, abpDistributedLock, distributedEventBus, loggerFactory) { - DataSeeder = dataSeeder; - DbSchemaMigrator = dbSchemaMigrator; - TenantRepository = tenantRepository; - } - - protected async override Task LockAndApplyDatabaseMigrationsAsync() - { - await base.LockAndApplyDatabaseMigrationsAsync(); - - var tenants = await TenantRepository.GetListAsync(); - foreach (var tenant in tenants.Where(x => x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } - } - - protected async override Task SeedAsync() - { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementMigrationsEntityFrameworkCoreModule.cs index 62f474e8b..3f6cce80f 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementMigrationsEntityFrameworkCoreModule.cs @@ -1,11 +1,11 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Quartz.MySqlInstaller; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.TaskManagement.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -17,7 +17,7 @@ namespace LY.MicroService.TaskManagement.EntityFrameworkCore; typeof(AbpQuartzMySqlInstallerModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(TaskManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), @@ -35,38 +35,8 @@ public class TaskManagementMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); - - Configure(options => - { - options.Databases.Configure("Platform", database => - { - database.MapConnection("AbpSaas"); - database.MapConnection("Workflow"); - database.MapConnection("AppPlatform"); - database.MapConnection("TaskManagement"); - database.MapConnection("AbpAuditLogging"); - database.MapConnection("AbpTextTemplating"); - database.MapConnection("AbpSettingManagement"); - database.MapConnection("AbpFeatureManagement"); - database.MapConnection("AbpPermissionManagement"); - database.MapConnection("AbpLocalizationManagement"); - database.MapConnection("AbpDataProtectionManagement"); - }); - options.Databases.Configure("Identity", database => - { - database.MapConnection("AbpGdpr"); - database.MapConnection("AbpIdentity"); - database.MapConnection("AbpOpenIddict"); - database.MapConnection("AbpIdentityServer"); - }); - options.Databases.Configure("Realtime", database => - { - database.MapConnection("Notifications"); - database.MapConnection("MessageService"); - }); - }); } } diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/LY.MicroService.WebhooksManagement.EntityFrameworkCore.csproj b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/LY.MicroService.WebhooksManagement.EntityFrameworkCore.csproj index 57025cdc7..78ec226f7 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/LY.MicroService.WebhooksManagement.EntityFrameworkCore.csproj +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/LY.MicroService.WebhooksManagement.EntityFrameworkCore.csproj @@ -14,13 +14,13 @@ all runtime; build; native; contentfiles; analyzers; buildtransitive - + diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs index 748dd7a4d..30c0a2212 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs @@ -1,6 +1,4 @@ using Microsoft.Extensions.Logging; -using System.Threading.Tasks; -using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.EntityFrameworkCore.Migrations; using Volo.Abp.EventBus.Distributed; @@ -11,30 +9,14 @@ namespace LY.MicroService.WebhooksManagement.EntityFrameworkCore; public class WebhooksManagementDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase { - protected IDataSeeder DataSeeder { get; } - public WebhooksManagementDbMigrationEventHandler( ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, ITenantStore tenantStore, IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, - ILoggerFactory loggerFactory, - IDataSeeder dataSeeder) + ILoggerFactory loggerFactory) : base("WebhooksManagementDbMigrator", currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { - DataSeeder = dataSeeder; - } - - protected async override Task AfterTenantCreated(TenantCreatedEto eventData, bool schemaMigrated) - { - if (!schemaMigrated) - { - return; - } - using (CurrentTenant.Change(eventData.Id)) - { - await DataSeeder.SeedAsync(eventData.Id); - } } } diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationService.cs index 4ddfa4424..212982149 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationService.cs @@ -1,9 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; -using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; @@ -15,14 +12,7 @@ namespace LY.MicroService.WebhooksManagement.EntityFrameworkCore; public class WebhooksManagementDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } - public WebhooksManagementDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -33,26 +23,5 @@ public class WebhooksManagementDbMigrationService : EfCoreRuntimeDbMigratorBase< ConnectionStringNameAttribute.GetConnStringName(), unitOfWorkManager, serviceProvider, currentTenant, abpDistributedLock, distributedEventBus, loggerFactory) { - DataSeeder = dataSeeder; - DbSchemaMigrator = dbSchemaMigrator; - TenantRepository = tenantRepository; - } - - protected async override Task LockAndApplyDatabaseMigrationsAsync() - { - await base.LockAndApplyDatabaseMigrationsAsync(); - - var tenants = await TenantRepository.GetListAsync(); - foreach (var tenant in tenants.Where(x => x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } - } - - protected async override Task SeedAsync() - { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementMigrationsEntityFrameworkCoreModule.cs index a3aa1fddf..2365452da 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementMigrationsEntityFrameworkCoreModule.cs @@ -1,9 +1,10 @@ using LINGYUN.Abp.Data.DbMigrator; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.WebhooksManagement.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.DependencyInjection; using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; @@ -14,7 +15,7 @@ namespace LY.MicroService.WebhooksManagement.EntityFrameworkCore; [DependsOn( typeof(AbpSaasEntityFrameworkCoreModule), typeof(WebhooksManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), @@ -32,7 +33,7 @@ public class WebhooksManagementMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/Dto/IdentitySessionDto.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/Dto/IdentitySessionDto.cs index 20900165d..bb764eb86 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/Dto/IdentitySessionDto.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application.Contracts/LINGYUN/Abp/Account/Dto/IdentitySessionDto.cs @@ -2,7 +2,7 @@ using Volo.Abp.Application.Dtos; namespace LINGYUN.Abp.Account; -public class IdentitySessionDto : EntityDto +public class IdentitySessionDto : ExtensibleEntityDto { public string SessionId { get; set; } diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs index c4f87f336..80450c50a 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/AccountAppService.cs @@ -1,6 +1,5 @@ using LINGYUN.Abp.Account.Security; using LINGYUN.Abp.Identity; -using LINGYUN.Abp.Identity.Security; using LINGYUN.Abp.Identity.Settings; using LINGYUN.Abp.WeChat; using LINGYUN.Abp.WeChat.MiniProgram; @@ -11,7 +10,6 @@ using Microsoft.Extensions.Options; using System; using System.ComponentModel.DataAnnotations; using System.Linq; -using System.Text; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Application.Dtos; @@ -26,7 +24,6 @@ namespace LINGYUN.Abp.Account; public class AccountAppService : AccountApplicationServiceBase, IAccountAppService { - protected ITotpService TotpService { get; } protected IIdentityUserRepository UserRepository { get; } protected IAccountSmsSecurityCodeSender SecurityCodeSender { get; } protected IWeChatOpenIdFinder WeChatOpenIdFinder { get; } @@ -35,7 +32,6 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi protected IDistributedCache SecurityTokenCache { get; } public AccountAppService( - ITotpService totpService, IWeChatOpenIdFinder weChatOpenIdFinder, IIdentityUserRepository userRepository, IAccountSmsSecurityCodeSender securityCodeSender, @@ -43,7 +39,6 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi AbpWeChatMiniProgramOptionsFactory miniProgramOptionsFactory, IdentitySecurityLogManager identitySecurityLogManager) { - TotpService = totpService; UserRepository = userRepository; WeChatOpenIdFinder = weChatOpenIdFinder; SecurityCodeSender = securityCodeSender; @@ -106,7 +101,9 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi await CheckSelfRegistrationAsync(); await CheckNewUserPhoneNumberNotBeUsedAsync(input.PhoneNumber); - var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "SmsVerifyCode"); + var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey( + input.PhoneNumber, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterPurpose); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); var interval = await SettingProvider.GetAsync(IdentitySettingNames.User.SmsRepetInterval, 1); @@ -117,11 +114,21 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi var template = await SettingProvider.GetOrNullAsync(IdentitySettingNames.User.SmsNewUserRegister); - // 安全令牌 - var securityToken = GuidGenerator.Create().ToString("N"); + var tempNewUser = new IdentityUser( + GuidGenerator.Create(), + "TempUser", + "TempUser@abp.io", + CurrentTenant.Id); + tempNewUser.SetPhoneNumberRegisterUser(); - var code = TotpService.GenerateCode(Encoding.Unicode.GetBytes(securityToken), securityTokenCacheKey); - securityTokenCacheItem = new SecurityTokenCacheItem(code.ToString(), securityToken); + (await UserManager.UpdateSecurityStampAsync(tempNewUser)).CheckErrors(); + + var code = await UserManager.GenerateUserTokenAsync( + tempNewUser, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterTokenProvider, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterPurpose); + + securityTokenCacheItem = new SecurityTokenCacheItem(code, tempNewUser.Id, await UserManager.GetSecurityStampAsync(tempNewUser)); await SecurityCodeSender.SendAsync( input.PhoneNumber, securityTokenCacheItem.Token, template); @@ -140,7 +147,9 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi await IdentityOptions.SetAsync(); await CheckNewUserPhoneNumberNotBeUsedAsync(input.PhoneNumber); - var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "SmsVerifyCode"); + var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey( + input.PhoneNumber, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterPurpose); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); if (securityTokenCacheItem == null) { @@ -149,11 +158,21 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi } // 验证码是否有效 - if (input.Code.Equals(securityTokenCacheItem.Token) && int.TryParse(input.Code, out int token)) + if (input.Code.Equals(securityTokenCacheItem.Token)) { - var securityToken = Encoding.Unicode.GetBytes(securityTokenCacheItem.SecurityToken); - // 校验totp验证码 - if (TotpService.ValidateCode(securityToken, token, securityTokenCacheKey)) + var tempNewUser = new IdentityUser( + securityTokenCacheItem.UserId, + "TempUser", + "TempUser@abp.io", + CurrentTenant.Id); + tempNewUser.SetPhoneNumberRegisterUser(); + await UserStore.SetSecurityStampAsync(tempNewUser, securityTokenCacheItem.SecurityToken); + + if (await UserManager.VerifyUserTokenAsync( + tempNewUser, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterTokenProvider, + UserTwoFactorTokenProviderConsts.PhoneNumberRegisterPurpose, + input.Code)) { var userEmail = input.EmailAddress ?? $"{input.PhoneNumber}@{CurrentTenant.Name ?? "default"}.io";//如果邮件地址不验证,随意写入一个 var userName = input.UserName ?? input.PhoneNumber; @@ -162,11 +181,11 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi Name = input.Name ?? input.PhoneNumber }; - await UserStore.SetPhoneNumberAsync(user, input.PhoneNumber); - await UserStore.SetPhoneNumberConfirmedAsync(user, true); - + (await UserManager.SetPhoneNumberAsync(user, input.PhoneNumber)).CheckErrors(); (await UserManager.CreateAsync(user, input.Password)).CheckErrors(); + await UserStore.SetPhoneNumberConfirmedAsync(user, true); + (await UserManager.AddDefaultRolesAsync(user)).CheckErrors(); await SecurityTokenCache.RemoveAsync(securityTokenCacheKey); @@ -191,21 +210,6 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi public async virtual Task SendPhoneResetPasswordCodeAsync(SendPhoneResetPasswordCodeDto input) { - /* - * 注解: 微软的重置密码方法通过 UserManager.GeneratePasswordResetTokenAsync 接口生成密码重置Token - * 而这个Token设计的意义就是用户通过链接来重置密码,所以不适合短信验证 - * 某些企业是把链接生成一个短链发送短信的,不过这种方式不是很推荐,因为现在是真没几个人敢随便点短信链接的 - * - * 此处设计方式为: - * - * step1: 例行检查是否重复发送,这一点是很有必要的 - * step2: 通过已确认的手机号来查询用户,如果用户未确认手机号,那就不能发送,这一点也是很有必要的 - * step3(重点): 通过 UserManager.GenerateTwoFactorTokenAsync 接口来生成二次认证码,这就相当于伪验证码,只是用于确认用户传递的验证码是否通过 - * 比起自己生成随机数,这个验证码利用了TOTP算法,有时间限制的 - * step4(重点): 用户传递验证码后,通过 UserManager.VerifyTwoFactorTokenAsync 接口来校验验证码 - * 验证通过后,再利用 UserManager.GeneratePasswordResetTokenAsync 接口来生成真正的用于重置密码的Token - */ - // 传递 isConfirmed 用户必须是已确认过手机号的 var user = await GetUserByPhoneNumberAsync(input.PhoneNumber, isConfirmed: true); // 外部认证用户不允许修改密码 @@ -214,7 +218,9 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi throw new BusinessException(code: Volo.Abp.Identity.IdentityErrorCodes.ExternalUserPasswordChange); } - var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "SmsVerifyCode"); + var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey( + input.PhoneNumber, + UserTwoFactorTokenProviderConsts.PhoneResetPasswordPurpose); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); var interval = await SettingProvider.GetAsync(IdentitySettingNames.User.SmsRepetInterval, 1); // 能查询到缓存就是重复发送 @@ -225,11 +231,14 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi var template = await SettingProvider.GetOrNullAsync(IdentitySettingNames.User.SmsResetPassword); // 生成二次认证码 - var code = await UserManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider); + var code = await UserManager.GenerateUserTokenAsync( + user, + TokenOptions.DefaultPhoneProvider, + UserTwoFactorTokenProviderConsts.PhoneResetPasswordPurpose); // 发送短信验证码 await SecurityCodeSender.SendAsync(input.PhoneNumber, code, template); // 缓存这个手机号的记录,防重复 - securityTokenCacheItem = new SecurityTokenCacheItem(code, user.SecurityStamp); + securityTokenCacheItem = new SecurityTokenCacheItem(code, user.Id, user.SecurityStamp); await SecurityTokenCache .SetAsync(securityTokenCacheKey, securityTokenCacheItem, new DistributedCacheEntryOptions @@ -240,7 +249,9 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi public async virtual Task ResetPasswordAsync(PhoneResetPasswordDto input) { - var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "SmsVerifyCode"); + var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey( + input.PhoneNumber, + UserTwoFactorTokenProviderConsts.PhoneResetPasswordPurpose); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); if (securityTokenCacheItem == null) { @@ -255,7 +266,11 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi throw new BusinessException(code: Volo.Abp.Identity.IdentityErrorCodes.ExternalUserPasswordChange); } // 验证二次认证码 - if (!await UserManager.VerifyTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider, input.Code)) + if (!await UserManager.VerifyUserTokenAsync( + user, + TokenOptions.DefaultPhoneProvider, + UserTwoFactorTokenProviderConsts.PhoneResetPasswordPurpose, + input.Code)) { // 验证码无效 throw new UserFriendlyException(L["InvalidVerifyCode"]); @@ -281,7 +296,7 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi public async virtual Task SendPhoneSigninCodeAsync(SendPhoneSigninCodeDto input) { - var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "SmsVerifyCode"); + var securityTokenCacheKey = SecurityTokenCacheItem.CalculateSmsCacheKey(input.PhoneNumber, "PhoneNumberSignin"); var securityTokenCacheItem = await SecurityTokenCache.GetAsync(securityTokenCacheKey); var interval = await SettingProvider.GetAsync(IdentitySettingNames.User.SmsRepetInterval, 1); if (securityTokenCacheItem != null) @@ -290,13 +305,14 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi } // 传递 isConfirmed 验证过的用户才允许通过手机登录 var user = await GetUserByPhoneNumberAsync(input.PhoneNumber, isConfirmed: true); + // 登录验证手机号需要使用二次自带的认证 var code = await UserManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider); var template = await SettingProvider.GetOrNullAsync(IdentitySettingNames.User.SmsUserSignin); // 发送登录验证码短信 await SecurityCodeSender.SendAsync(input.PhoneNumber, code, template); // 缓存登录验证码状态,防止同一手机号重复发送 - securityTokenCacheItem = new SecurityTokenCacheItem(code, user.SecurityStamp); + securityTokenCacheItem = new SecurityTokenCacheItem(code, user.Id, user.SecurityStamp); await SecurityTokenCache .SetAsync(securityTokenCacheKey, securityTokenCacheItem, new DistributedCacheEntryOptions @@ -320,6 +336,7 @@ public class AccountAppService : AccountApplicationServiceBase, IAccountAppServi throw new UserFriendlyException(L["UserEmailNotConfirmed"]); } + // 登录验证邮件安全码需要使用二次自带的认证 var code = await UserManager.GenerateTwoFactorTokenAsync(user, TokenOptions.DefaultEmailProvider); await sender.SendLoginCodeAsync(code, user.UserName, user.Email); diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MyProfileAppService.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MyProfileAppService.cs index a04a78274..b0613662d 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MyProfileAppService.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/MyProfileAppService.cs @@ -79,17 +79,27 @@ public class MyProfileAppService : AccountApplicationServiceBase, IMyProfileAppS userId, input.Device, input.ClientId); return new PagedResultDto(totalCount, - identitySessions.Select(session => new IdentitySessionDto + identitySessions.Select(session => { - Id = session.Id, - SessionId = session.SessionId, - SignedIn = session.SignedIn, - ClientId = session.ClientId, - Device = session.Device, - UserId = session.UserId, - DeviceInfo = session.DeviceInfo, - IpAddresses = session.IpAddresses, - LastAccessed = session.LastAccessed, + var sessionDto = new IdentitySessionDto + { + Id = session.Id, + SessionId = session.SessionId, + SignedIn = session.SignedIn, + ClientId = session.ClientId, + Device = session.Device, + UserId = session.UserId, + DeviceInfo = session.DeviceInfo, + IpAddresses = session.IpAddresses, + LastAccessed = session.LastAccessed, + }; + + foreach (var prop in session.ExtraProperties) + { + sessionDto.SetProperty(prop.Key, prop.Value); + } + + return sessionDto; }).ToList()); } @@ -145,7 +155,7 @@ public class MyProfileAppService : AccountApplicationServiceBase, IMyProfileAppS // 发送验证码 await SmsSecurityCodeSender.SendAsync(input.NewPhoneNumber, token, template); - securityTokenCacheItem = new SecurityTokenCacheItem(token, user.ConcurrencyStamp); + securityTokenCacheItem = new SecurityTokenCacheItem(token, user.Id, user.ConcurrencyStamp); await SecurityTokenCache .SetAsync(securityTokenCacheKey, securityTokenCacheItem, new DistributedCacheEntryOptions diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/UserProfilePictureProvider.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/UserProfilePictureProvider.cs index 20bd32dc9..0caa2490b 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/UserProfilePictureProvider.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Application/LINGYUN/Abp/Account/UserProfilePictureProvider.cs @@ -92,8 +92,6 @@ public class UserProfileUserPictureProvider : IUserPictureProvider var pictureName = $"{user.Id:N}/avatar/{picture}"; - return await AccountBlobContainer.ExistsAsync(pictureName) - ? await AccountBlobContainer.GetAsync(pictureName) - : Stream.Null; + return await AccountBlobContainer.GetOrNullAsync(pictureName) ?? Stream.Null; } } diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerLoginModel.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerLoginModel.cs index c54a5e42e..90d83c431 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerLoginModel.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.IdentityServer/Pages/Account/IdentityServerLoginModel.cs @@ -5,12 +5,17 @@ using IdentityServer4.Stores; using LINGYUN.Abp.Account.Web.ExternalProviders; using LINGYUN.Abp.Account.Web.Models; using LINGYUN.Abp.Account.Web.Pages.Account; +using LINGYUN.Abp.Identity.QrCode; using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; +using Microsoft.AspNetCore.Mvc.ModelBinding; +using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; using System; using System.Diagnostics; using System.Linq; +using System.Security.Claims; using System.Threading.Tasks; using Volo.Abp.Account.Settings; using Volo.Abp.Account.Web; @@ -112,31 +117,28 @@ namespace LINGYUN.Abp.Account.Web.IdentityServer.Pages.Account var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl); if (action == "Cancel") { - if (context == null) - { - return Redirect("~/"); - } - - await Interaction.GrantConsentAsync(context, new ConsentResponse() - { - Error = AuthorizationError.AccessDenied - }); - - return Redirect(ReturnUrl); + return await OnCancelLogin(context); } - await CheckLocalLoginAsync(); - - ValidateModel(); + LoginType = LoginType.Password; - await IdentityOptions.SetAsync(); + await CheckLocalLoginAsync(); ExternalProviders = await GetExternalProviders(); EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + ModelState.RemoveModelErrors(nameof(PhoneLoginInput)); + ModelState.RemoveModelErrors(nameof(QrCodeLoginInput)); + if (!TryValidateModel(PasswordLoginInput, nameof(PasswordLoginInput))) + { + return Page(); + } + await ReplaceEmailToUsernameOfInputIfNeeds(); + await IdentityOptions.SetAsync(); + var result = await SignInManager.PasswordSignInAsync( PasswordLoginInput.UserNameOrEmailAddress, PasswordLoginInput.Password, @@ -148,8 +150,7 @@ namespace LINGYUN.Abp.Account.Web.IdentityServer.Pages.Account { Identity = IdentitySecurityLogIdentityConsts.Identity, Action = result.ToIdentitySecurityLogAction(), - UserName = PasswordLoginInput.UserNameOrEmailAddress, - ClientId = context?.Client?.ClientId + UserName = PasswordLoginInput.UserNameOrEmailAddress }); if (result.RequiresTwoFactor) @@ -173,8 +174,7 @@ namespace LINGYUN.Abp.Account.Web.IdentityServer.Pages.Account } //TODO: Find a way of getting user's id from the logged in user and do not query it again like that! - var user = await UserManager.FindByNameAsync(PasswordLoginInput.UserNameOrEmailAddress) ?? - await UserManager.FindByEmailAsync(PasswordLoginInput.UserNameOrEmailAddress); + var user = await GetIdentityUserAsync(PasswordLoginInput.UserNameOrEmailAddress); Debug.Assert(user != null, nameof(user) + " != null"); await IdentityServerEvents.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName)); //TODO: Use user's name once implemented @@ -182,7 +182,184 @@ namespace LINGYUN.Abp.Account.Web.IdentityServer.Pages.Account // Clear the dynamic claims cache. await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(user.Id, user.TenantId); - return await RedirectSafelyAsync(ReturnUrl, ReturnUrlHash); + return await RedirectSafelyAsync(PasswordLoginInput.ReturnUrl, PasswordLoginInput.ReturnUrlHash); + } + + public override async Task OnPostPhoneNumberLogin(string action) + { + var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl); + if (action == "Cancel") + { + return await OnCancelLogin(context); + } + + LoginType = LoginType.PhoneNumber; + + await CheckLocalLoginAsync(); + + ExternalProviders = await GetExternalProviders(); + + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + + ModelState.RemoveModelErrors(nameof(QrCodeLoginInput)); + ModelState.RemoveModelErrors(nameof(PasswordLoginInput)); + if (!TryValidateModel(PhoneLoginInput, nameof(PhoneLoginInput))) + { + return Page(); + } + + var user = await UserRepository.FindByPhoneNumberAsync(PhoneLoginInput.PhoneNumber); + if (user == null) + { + Logger.LogInformation("the user phone number is not registed!"); + Alerts.Danger(L["InvalidPhoneNumber"]); + return Page(); + } + + var result = await UserManager.VerifyTwoFactorTokenAsync(user, TokenOptions.DefaultPhoneProvider, PhoneLoginInput.Code); + if (!result) + { + Alerts.Danger(L["InvalidVerifyCode"]); + return Page(); + } + + await SignInManager.SignInAsync(user, PhoneLoginInput.RememberMe); + + await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() + { + Identity = IdentitySecurityLogIdentityConsts.IdentityTwoFactor, + Action = IdentitySecurityLogActionConsts.LoginSucceeded, + UserName = user.UserName + }); + + await IdentityServerEvents.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName)); //TODO: Use user's name once implemented + + // Clear the dynamic claims cache. + await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(user.Id, user.TenantId); + + return await RedirectSafelyAsync(PhoneLoginInput.ReturnUrl, PhoneLoginInput.ReturnUrlHash); + } + + public override async Task OnPostQrCodeLogin(string action) + { + var context = await Interaction.GetAuthorizationContextAsync(ReturnUrl); + if (action == "Cancel") + { + return await OnCancelLogin(context); + } + + LoginType = LoginType.QrCode; + + await CheckLocalLoginAsync(); + + ExternalProviders = await GetExternalProviders(); + + EnableLocalLogin = await SettingProvider.IsTrueAsync(AccountSettingNames.EnableLocalLogin); + + ModelState.RemoveModelErrors(nameof(PhoneLoginInput)); + ModelState.RemoveModelErrors(nameof(PasswordLoginInput)); + if (!TryValidateModel(QrCodeLoginInput, nameof(QrCodeLoginInput))) + { + return Page(); + } + + var qrCodeInfo = await QrCodeLoginProvider.GetCodeAsync(QrCodeLoginInput.Key); + // 二维码扫描后用户Id不为空 + if (qrCodeInfo == null || qrCodeInfo.Token.IsNullOrWhiteSpace() == true) + { + Alerts.Danger(L["QrCode:Invalid"]); + return Page(); + } + + SetTenantCookies(qrCodeInfo.TenantId); + using (CurrentTenant.Change(qrCodeInfo.TenantId)) + { + var user = await UserManager.FindByIdAsync(qrCodeInfo.UserId); + if (user == null) + { + // TODO: 用户验证无效? + Alerts.Danger(L["QrCode:Invalid"]); + return Page(); + } + + if (!await UserManager.VerifyUserTokenAsync(user, QrCodeLoginProviderConsts.Name, QrCodeLoginProviderConsts.Purpose, qrCodeInfo.Token)) + { + Alerts.Danger(L["QrCode:Invalid"]); + return Page(); + } + + // TODO: 记住登录 + await SignInManager.SignInAsync(user, true); + + await QrCodeLoginProvider.RemoveAsync(QrCodeLoginInput.Key); + + await IdentitySecurityLogManager.SaveAsync(new IdentitySecurityLogContext() + { + Identity = QrCodeLoginProviderConsts.Purpose, + Action = IdentitySecurityLogActionConsts.LoginSucceeded, + UserName = user.UserName + }); + + await IdentityServerEvents.RaiseAsync(new UserLoginSuccessEvent(user.UserName, user.Id.ToString(), user.UserName)); //TODO: Use user's name once implemented + + // Clear the dynamic claims cache. + await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(user.Id, user.TenantId); + + return await RedirectSafelyAsync(QrCodeLoginInput.ReturnUrl, QrCodeLoginInput.ReturnUrlHash); + } + } + + public override async Task OnPostExternalLogin(string provider) + { + if (AccountOptions.WindowsAuthenticationSchemeName == provider) + { + return await ProcessWindowsLoginAsync(); + } + + return await base.OnPostExternalLogin(provider); + } + + protected async virtual Task OnCancelLogin(AuthorizationRequest context) + { + if (context == null) + { + return Redirect("~/"); + } + + await Interaction.GrantConsentAsync(context, new ConsentResponse() + { + Error = AuthorizationError.AccessDenied + }); + + return Redirect(ReturnUrl); + } + + protected virtual async Task ProcessWindowsLoginAsync() + { + var result = await HttpContext.AuthenticateAsync(AccountOptions.WindowsAuthenticationSchemeName); + if (result.Succeeded) + { + var props = new AuthenticationProperties() + { + RedirectUri = Url.Page("./Login", pageHandler: "ExternalLoginCallback", values: new { ReturnUrl, ReturnUrlHash }), + Items = + { + { + "LoginProvider", AccountOptions.WindowsAuthenticationSchemeName + }, + } + }; + + var id = new ClaimsIdentity(AccountOptions.WindowsAuthenticationSchemeName); + id.AddClaim(new Claim(ClaimTypes.NameIdentifier, result.Principal.FindFirstValue(ClaimTypes.PrimarySid))); + id.AddClaim(new Claim(ClaimTypes.Name, result.Principal.FindFirstValue(ClaimTypes.Name))); + + await HttpContext.SignInAsync(IdentityConstants.ExternalScheme, new ClaimsPrincipal(id), props); + + return Redirect(props.RedirectUri); + } + + return Challenge(AccountOptions.WindowsAuthenticationSchemeName); } } } diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictLoginModel.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictLoginModel.cs index bec7814d0..337a48f9c 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictLoginModel.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/OpenIddictLoginModel.cs @@ -1,9 +1,13 @@ using LINGYUN.Abp.Account.Web.ExternalProviders; using LINGYUN.Abp.Account.Web.Pages.Account; using Microsoft.AspNetCore.Authentication; +using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Mvc; using Microsoft.Extensions.Options; +using OpenIddict.Server; +using OpenIddict.Server.AspNetCore; using System; +using System.Security.Claims; using System.Threading.Tasks; using Volo.Abp.Account.Web; using Volo.Abp.DependencyInjection; @@ -56,5 +60,92 @@ namespace LINGYUN.Abp.Account.Web.OpenIddict.Pages.Account return await base.OnGetAsync(); } + + public async override Task OnPostPasswordLogin(string action) + { + if (action == "Cancel") + { + return await OnCancelLogin(action); + } + + return await base.OnPostPasswordLogin(action); + } + + public async override Task OnPostPhoneNumberLogin(string action) + { + if (action == "Cancel") + { + return await OnCancelLogin(action); + } + + return await base.OnPostPhoneNumberLogin(action); + } + + public async override Task OnPostQrCodeLogin(string action) + { + if (action == "Cancel") + { + return await OnCancelLogin(action); + } + + return await base.OnPostQrCodeLogin(action); + } + + public async override Task OnPostExternalLogin(string provider) + { + if (AccountOptions.WindowsAuthenticationSchemeName == provider) + { + return await ProcessWindowsLoginAsync(); + } + + return await base.OnPostExternalLogin(provider); + } + + protected async virtual Task OnCancelLogin(string action) + { + var request = await OpenIddictRequestHelper.GetFromReturnUrlAsync(ReturnUrl); + + var transaction = HttpContext.GetOpenIddictServerTransaction(); + if (request?.ClientId != null && transaction != null) + { + transaction.EndpointType = OpenIddictServerEndpointType.Authorization; + transaction.Request = request; + + var notification = new OpenIddictServerEvents.ValidateAuthorizationRequestContext(transaction); + transaction.SetProperty(typeof(OpenIddictServerEvents.ValidateAuthorizationRequestContext).FullName!, notification); + + return Forbid(OpenIddictServerAspNetCoreDefaults.AuthenticationScheme); + } + + return Redirect("~/"); + } + + protected virtual async Task ProcessWindowsLoginAsync() + { + var result = await HttpContext.AuthenticateAsync(AccountOptions.WindowsAuthenticationSchemeName); + if (result.Succeeded) + { + var props = new AuthenticationProperties() + { + RedirectUri = Url.Page("./Login", pageHandler: "ExternalLoginCallback", values: new { ReturnUrl, ReturnUrlHash }), + Items = + { + { + "LoginProvider", AccountOptions.WindowsAuthenticationSchemeName + } + } + }; + + var id = new ClaimsIdentity(AccountOptions.WindowsAuthenticationSchemeName); + id.AddClaim(new Claim(ClaimTypes.NameIdentifier, result.Principal.FindFirstValue(ClaimTypes.PrimarySid))); + id.AddClaim(new Claim(ClaimTypes.Name, result.Principal.FindFirstValue(ClaimTypes.Name))); + + await HttpContext.SignInAsync(IdentityConstants.ExternalScheme, new ClaimsPrincipal(id), props); + + return Redirect(props.RedirectUri!); + } + + return Challenge(AccountOptions.WindowsAuthenticationSchemeName); + } } } diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/FodyWeavers.xml diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/FodyWeavers.xsd similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/FodyWeavers.xsd rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/FodyWeavers.xsd diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN.Abp.BlobManagement.Aliyun.csproj similarity index 61% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN.Abp.BlobManagement.Aliyun.csproj index 08cb03efc..9cde9ab5d 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN.Abp.OssManagement.Aliyun.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN.Abp.BlobManagement.Aliyun.csproj @@ -1,21 +1,26 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.Aliyun - LINGYUN.Abp.OssManagement.Aliyun - false - false - false - - - - - - - - - + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.Aliyun + LINGYUN.Abp.BlobManagement.Aliyun + false + false + false + enable + + + + + + + + + + + + + diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AbpBlobManagementAliyunModule.cs similarity index 50% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AbpBlobManagementAliyunModule.cs index 9a94ec8fd..96da4d2aa 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AbpOssManagementAliyunModule.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AbpBlobManagementAliyunModule.cs @@ -5,33 +5,34 @@ using System; using Volo.Abp.BlobStoring; using Volo.Abp.Modularity; -namespace LINGYUN.Abp.OssManagement.Aliyun; +namespace LINGYUN.Abp.BlobManagement.Aliyun; [DependsOn( - typeof(AbpBlobStoringAliyunModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementAliyunModule : AbpModule + typeof(AbpBlobManagementDomainModule), + typeof(AbpBlobStoringAliyunModule))] +public class AbpBlobManagementAliyunModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); - var ossConfiguration = configuration.GetSection("OssManagement"); + var ossConfiguration = configuration.GetSection("BlobManagement"); var ossProvider = ossConfiguration["Provider"]; if (!ossProvider.IsNullOrWhiteSpace() && - "Aliyun".Equals(ossProvider, StringComparison.InvariantCultureIgnoreCase)) + string.Equals(AliyunBlobProvider.ProviderName, ossProvider, StringComparison.InvariantCultureIgnoreCase)) { Configure(options => { - options.Containers.ConfigureAll((containerName, containerConfiguration) => + options.Containers.Configure((containerConfiguration) => { containerConfiguration.UseAliyun(oss => { - ossConfiguration.GetSection("Aliyun").Bind(oss); + ossConfiguration.GetSection(AliyunBlobProvider.ProviderName).Bind(oss); }); }); }); - context.Services.AddAliyunContainer(); + context.Services.AddAliyunHttpClient(); + context.Services.AddTransient(); } } } diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AliyunBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AliyunBlobProvider.cs new file mode 100644 index 000000000..50157e116 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/LINGYUN/Abp/BlobManagement/Aliyun/AliyunBlobProvider.cs @@ -0,0 +1,185 @@ +using Aliyun.OSS; +using LINGYUN.Abp.BlobStoring.Aliyun; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.IO; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement.Aliyun; + +public class AliyunBlobProvider : IBlobProvider +{ + public const string ProviderName = "Aliyun"; + public string Name => ProviderName; + + protected IConfiguration Configuration { get; } + protected ICurrentTenant CurrentTenant { get; } + protected IOssClientFactory OssClientFactory { get; } + protected IHttpClientFactory HttpClientFactory { get; } + protected AliyunBlobNamingNormalizer BlobNamingNormalizer { get; } + + public AliyunBlobProvider( + IConfiguration configuration, + ICurrentTenant currentTenant, + IOssClientFactory ossClientFactory, + IHttpClientFactory httpClientFactory, + AliyunBlobNamingNormalizer blobNamingNormalizer) + { + Configuration = configuration; + CurrentTenant = currentTenant; + OssClientFactory = ossClientFactory; + HttpClientFactory = httpClientFactory; + BlobNamingNormalizer = blobNamingNormalizer; + } + + public async virtual Task CreateContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(name); + + CreateBucketIfNotExists(client, bucket); + } + + public async virtual Task DeleteContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(name); + + if (!BucketExists(client, bucket)) + { + return; + } + + client.DeleteBucket(bucket); + } + + public async virtual Task DeleteBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (ObjectExists(client, bucket, objectName)) + { + client.DeleteObject(bucket, objectName); + } + } + + public virtual Task DeleteFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // 阿里云Oss没有目录的概念,新建对象时可以模拟目录 + return Task.CompletedTask; + } + + public async virtual Task DownloadBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (!ObjectExists(client, bucket, objectName)) + { + return null; + } + + var downloadUrl = client.GeneratePresignedUri(bucket, objectName); + + var httpClient = HttpClientFactory.CreateAliyunHttpClient(); + + return await httpClient.GetStreamAsync(downloadUrl, cancellationToken); + } + + public virtual Task CreateFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // 阿里云Oss没有目录的概念,新建对象时可以模拟目录 + // https://cloud.tencent.com/document/product/436/13324 + return Task.CompletedTask; + } + + public async virtual Task UploadBlobAsync( + string containerName, + string blobName, + Stream content, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + CreateBucketIfNotExists(client, bucket); + + client.PutObject(bucket, objectName, content); + } + + protected async virtual Task CreateClientAsync() + { + return await OssClientFactory.CreateAsync(); + } + + protected virtual void CreateBucketIfNotExists(IOss oss, string bucket) + { + if (!BucketExists(oss, bucket)) + { + oss.CreateBucket(bucket); + } + } + + protected virtual bool BucketExists(IOss oss, string bucket) + { + return oss.DoesBucketExist(bucket); + } + + protected virtual bool ObjectExists(IOss oss, string bucket, string objectName) + { + return oss.DoesObjectExist(bucket, objectName); + } + + protected virtual string GetPrefixPath() + { + return CurrentTenant.Id == null + ? $"host/" + : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/"; + } + + protected virtual string NormalizeContainerName(string containerName) + { + if (!containerName.StartsWith("abp-")) + { + containerName = "abp-" + containerName; + } + return BlobNamingNormalizer.NormalizeContainerName(containerName); + } + + protected virtual string CalculateBlobName(string blobName) + { + var blobPath = GetPrefixPath(); + + if (!blobName.IsNullOrWhiteSpace()) + { + blobPath += blobName.RemovePreFix("/"); + } + + return BlobNamingNormalizer.NormalizeBlobName(blobPath); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunHttpClientFactoryServiceCollectionExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunHttpClientFactoryServiceCollectionExtensions.cs new file mode 100644 index 000000000..73f01c175 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunHttpClientFactoryServiceCollectionExtensions.cs @@ -0,0 +1,18 @@ +using System.Net.Http; + +namespace Microsoft.Extensions.DependencyInjection; +internal static class AliyunHttpClientFactoryServiceCollectionExtensions +{ + private const string HttpClientName = "__BlobManagement_Aliyun_Client"; + public static IServiceCollection AddAliyunHttpClient(this IServiceCollection services) + { + services.AddHttpClient(HttpClientName); + + return services; + } + + public static HttpClient CreateAliyunHttpClient(this IHttpClientFactory httpClientFactory) + { + return httpClientFactory.CreateClient(HttpClientName); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/FodyWeavers.xml diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/FodyWeavers.xsd similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/FodyWeavers.xsd rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/FodyWeavers.xsd diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN.Abp.BlobManagement.Application.Contracts.csproj similarity index 68% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN.Abp.BlobManagement.Application.Contracts.csproj index 9543b00d6..8c963cfa7 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN.Abp.OssManagement.Application.Contracts.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN.Abp.BlobManagement.Application.Contracts.csproj @@ -5,11 +5,12 @@ netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 - LINGYUN.Abp.OssManagement.Application.Contracts - LINGYUN.Abp.OssManagement.Application.Contracts + LINGYUN.Abp.BlobManagement.Application.Contracts + LINGYUN.Abp.BlobManagement.Application.Contracts false false false + enable @@ -18,7 +19,7 @@ - + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationContractsModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationContractsModule.cs new file mode 100644 index 000000000..dc5566458 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationContractsModule.cs @@ -0,0 +1,11 @@ +using Volo.Abp.Application; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn( + typeof(AbpBlobManagementDomainSharedModule), + typeof(AbpDddApplicationContractsModule))] +public class AbpBlobManagementApplicationContractsModule : AbpModule +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/BlobManagementRemoteServiceConsts.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/BlobManagementRemoteServiceConsts.cs new file mode 100644 index 000000000..06c6c6073 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/BlobManagementRemoteServiceConsts.cs @@ -0,0 +1,7 @@ +namespace LINGYUN.Abp.BlobManagement; +public static class BlobManagementRemoteServiceConsts +{ + public const string RemoteServiceName = "BlobManagement"; + + public const string ModuleName = "blob-management"; +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs new file mode 100644 index 000000000..d83b76f48 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs @@ -0,0 +1,11 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerCreateDto +{ + [Required] + [DynamicStringLength(typeof(BlobContainerConsts), nameof(BlobContainerConsts.MaxNameLength))] + public string Name { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs new file mode 100644 index 000000000..ffb657a7f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs @@ -0,0 +1,11 @@ +using System; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Domain.Entities; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerDto : ExtensibleAuditedEntityDto, IHasConcurrencyStamp +{ + public string Name { get; set; } + public string ConcurrencyStamp { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs new file mode 100644 index 000000000..367ba2d79 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerGetPagedListInput : PagedAndSortedResultRequestDto +{ + public string? Filter { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs new file mode 100644 index 000000000..77715bb07 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobDownloadByNameInput +{ + [Required] + [DynamicStringLength(typeof(BlobContainerConsts), nameof(BlobContainerConsts.MaxNameLength))] + public string ContainerName { get; set; } + + [Required] + [DynamicStringLength(typeof(BlobConsts), nameof(BlobConsts.MaxNameLength))] + public string BlobName { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs new file mode 100644 index 000000000..83660f0bd --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs @@ -0,0 +1,36 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobDto : ExtensibleAuditedEntityDto +{ + /// + /// 名称 + /// + public string Name { get; set; } + /// + /// 全名 + /// + public string FullName { get; set; } + /// + /// 类型 + /// + public BlobType Type { get; set; } + /// + /// 内容类型 + /// + public string? ContentType { get; set; } + /// + /// 文件大小 + /// + public long Size { get; set; } + /// + /// 过期时间 + /// + public DateTime? ExpirationTime { get; set; } + /// + /// 下载次数 + /// + public long DownloadCount { get; set; } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs similarity index 55% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs index ac9cb1930..090e37e88 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileChunkInput.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs @@ -1,40 +1,27 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Auditing; -using Volo.Abp.Content; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -public class UploadFileChunkInput : UploadFile -{ - public string Bucket { get; set; } - public string Path { get; set; } - - #region 配合Uplaoder 分块传输 - /// - /// 常规块大小 - /// - [Required] - public long ChunkSize { get; set; } - /// - /// 当前块大小 - /// - [Required] - public long CurrentChunkSize { get; set; } - /// - /// 当前上传中块的索引 - /// - [Required] - public int ChunkNumber { get; set; } - /// - /// 块总数 - /// - [Required] - public int TotalChunks { get; set; } - - #endregion - - [DisableAuditing] - [DisableValidation] - public IRemoteStreamContent File { get; set; } -} +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public abstract class BlobFileChunkCreateBaseDto : BlobFileCreateBaseDto +{ + /// + /// 常规块大小 + /// + [Required] + public long ChunkSize { get; set; } + /// + /// 当前块大小 + /// + [Required] + public long CurrentChunkSize { get; set; } + /// + /// 当前上传中块的索引 + /// + [Required] + public int ChunkNumber { get; set; } + /// + /// 块总数 + /// + [Required] + public int TotalChunks { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs new file mode 100644 index 000000000..a61fc9958 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs @@ -0,0 +1,13 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileChunkCreateDto : BlobFileChunkCreateBaseDto +{ + /// + /// 容器Id + /// + [Required] + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs new file mode 100644 index 000000000..48b6d6e32 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs @@ -0,0 +1,5 @@ +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileChunkCreateWithoutContainerDto : BlobFileChunkCreateBaseDto +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs new file mode 100644 index 000000000..874256def --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs @@ -0,0 +1,31 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Auditing; +using Volo.Abp.Content; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public abstract class BlobFileCreateBaseDto +{ + /// + /// 用于服务端验证上传文件 + /// + public string? CompareMd5 { get; set; } + /// + /// 名称 + /// + [Required] + [DynamicStringLength(typeof(BlobConsts), nameof(BlobConsts.MaxNameLength))] + public string Name { get; set; } + /// + /// 所属BlobId + /// + public Guid? ParentId { get; set; } + /// + /// 文件内容 + /// + [DisableAuditing] + [DisableValidation] + public IRemoteStreamContent File { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs new file mode 100644 index 000000000..2e659879a --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs @@ -0,0 +1,13 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileCreateDto : BlobFileCreateBaseDto +{ + /// + /// 容器Id + /// + [Required] + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs new file mode 100644 index 000000000..5879bcd3b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs @@ -0,0 +1,5 @@ +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileCreateWithoutContainerDto : BlobFileCreateBaseDto +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs new file mode 100644 index 000000000..eb7b50ccd --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs @@ -0,0 +1,19 @@ +using System; +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public abstract class BlobFolderCreateBaseDto +{ + /// + /// 名称 + /// + [Required] + [DynamicStringLength(typeof(BlobConsts), nameof(BlobConsts.MaxNameLength))] + public string Name { get; set; } + /// + /// 所属BlobId + /// + public Guid? ParentId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs new file mode 100644 index 000000000..2bee08252 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs @@ -0,0 +1,13 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFolderCreateDto : BlobFolderCreateBaseDto +{ + /// + /// 容器Id + /// + [Required] + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs new file mode 100644 index 000000000..3d0be52fd --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs @@ -0,0 +1,5 @@ +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFolderCreateWithoutContainerDto : BlobFolderCreateBaseDto +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs new file mode 100644 index 000000000..98ed81123 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs @@ -0,0 +1,13 @@ +using System; +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobGetPagedListInput : BlobGetPagedListInputBase +{ + /// + /// 容器Id + /// + [Required] + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs new file mode 100644 index 000000000..4c185fbc4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.Application.Dtos; + +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public abstract class BlobGetPagedListInputBase : PagedAndSortedResultRequestDto +{ + /// + /// 上级BlobId + /// + public Guid? ParentId { get; set; } + /// + /// 类型 + /// + public BlobType? Type { get; set; } + /// + /// 内容类型 + /// + public string? ContentType { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs new file mode 100644 index 000000000..57f29e8e8 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs @@ -0,0 +1,5 @@ +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobGetPagedListWithoutContainerInput : BlobGetPagedListInputBase +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobAppService.cs new file mode 100644 index 000000000..3ea16c27a --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobAppService.cs @@ -0,0 +1,27 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobAppService : IApplicationService +{ + Task CreateFileAsync(BlobFileCreateDto input); + + Task CreateChunkFileAsync(BlobFileChunkCreateDto input); + + Task CreateFolderAsync(BlobFolderCreateDto input); + + Task DeleteAsync(Guid id); + + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(BlobDownloadByNameInput input); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs new file mode 100644 index 000000000..d1536f2a6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs @@ -0,0 +1,18 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobContainerAppService : IApplicationService +{ + Task CreateAsync(BlobContainerCreateDto input); + + Task DeleteAsync(Guid id); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobContainerGetPagedListInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs new file mode 100644 index 000000000..9d25f2704 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs @@ -0,0 +1,27 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IPrivateBlobAppService : IApplicationService +{ + Task CreateFileAsync(BlobFileCreateWithoutContainerDto input); + + Task CreateChunkFileAsync(BlobFileChunkCreateWithoutContainerDto input); + + Task CreateFolderAsync(BlobFolderCreateWithoutContainerDto input); + + Task DeleteAsync(Guid id); + + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(string name); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListWithoutContainerInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs new file mode 100644 index 000000000..dff540187 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs @@ -0,0 +1,19 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IPublicBlobAppService : IApplicationService +{ + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(string name); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListWithoutContainerInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs new file mode 100644 index 000000000..86f69508c --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs @@ -0,0 +1,14 @@ +using Volo.Abp.Auditing; +using Volo.Abp.Content; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Integration.Dtos; + +public class BlobFileCreateIntegrationDto : BlobFileGetByNameIntegrationDto +{ + public bool? Overwrite { get; set; } + + [DisableAuditing] + [DisableValidation] + public IRemoteStreamContent File { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileDeleteIntegrationDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileDeleteIntegrationDto.cs new file mode 100644 index 000000000..7698377fe --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileDeleteIntegrationDto.cs @@ -0,0 +1,5 @@ +namespace LINGYUN.Abp.BlobManagement.Integration.Dtos; + +public class BlobFileDeleteIntegrationDto : BlobFileGetByNameIntegrationDto +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs new file mode 100644 index 000000000..a25873fac --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs @@ -0,0 +1,15 @@ +using System.ComponentModel.DataAnnotations; +using Volo.Abp.Validation; + +namespace LINGYUN.Abp.BlobManagement.Integration.Dtos; + +public class BlobFileGetByNameIntegrationDto +{ + [Required] + [DynamicStringLength(typeof(BlobContainerConsts), nameof(BlobContainerConsts.MaxNameLength))] + public string ContainerName { get; set; } + + [Required] + [DynamicStringLength(typeof(BlobConsts), nameof(BlobConsts.MaxNameLength))] + public string BlobName { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs new file mode 100644 index 000000000..40a1fa835 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs @@ -0,0 +1,20 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement.Integration; + +[IntegrationService] +public interface IBlobIntegrationService : IApplicationService +{ + Task CreateAsync(BlobFileCreateIntegrationDto input); + + Task DeleteAsync(BlobFileGetByNameIntegrationDto input); + + Task ExistsAsync(BlobFileGetByNameIntegrationDto input); + + Task GetContentAsync(BlobFileGetByNameIntegrationDto input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionDefinitionProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionDefinitionProvider.cs new file mode 100644 index 000000000..afacc3089 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionDefinitionProvider.cs @@ -0,0 +1,49 @@ +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.BlobManagement.Localization; +using Volo.Abp.Authorization.Permissions; +using Volo.Abp.Features; +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.BlobManagement.Permissions; + +public class BlobManagementPermissionDefinitionProvider : PermissionDefinitionProvider +{ + public override void Define(IPermissionDefinitionContext context) + { + var blobManagement = context.AddGroup(BlobManagementPermissionNames.GroupName, L("Permission:BlobManagement")); + + var container = blobManagement.AddPermission( + BlobManagementPermissionNames.BlobContainer.Default, + L("Permission:BlobContainer")); + + container.AddChild(BlobManagementPermissionNames.BlobContainer.Create, L("Permission:Create")); + container.AddChild(BlobManagementPermissionNames.BlobContainer.Delete, L("Permission:Delete")); + + var blob = blobManagement + .AddPermission(BlobManagementPermissionNames.Blob.Default, L("Permission:Blob")) + .RequireFeatures(BlobManagementFeatureNames.Blob.Enable); + blob.AddChild(BlobManagementPermissionNames.Blob.Create, L("Permission:Upload")) + .RequireFeatures(BlobManagementFeatureNames.Blob.UploadFile); + blob.AddChild(BlobManagementPermissionNames.Blob.Delete, L("Permission:Delete")); + blob.AddChild(BlobManagementPermissionNames.Blob.Download, L("Permission:Download")) + .RequireFeatures(BlobManagementFeatureNames.Blob.DownloadFile); + + context.AddResourcePermission( + name: BlobManagementPermissionNames.Blob.Resources.Delete, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + managementPermissionName: BlobManagementPermissionNames.Blob.ManagePermissions, + displayName: L("Permission:Blob:Delete") + ); + context.AddResourcePermission( + name: BlobManagementPermissionNames.Blob.Resources.View, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + managementPermissionName: BlobManagementPermissionNames.Blob.ManagePermissions, + displayName: L("Permission:Blob:View") + ); + } + + private static LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionNames.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionNames.cs new file mode 100644 index 000000000..56bca0d0e --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application.Contracts/LINGYUN/Abp/BlobManagement/Permissions/BlobManagementPermissionNames.cs @@ -0,0 +1,35 @@ +namespace LINGYUN.Abp.BlobManagement.Permissions; + +public static class BlobManagementPermissionNames +{ + public const string GroupName = "AbpBlobManagement"; + + public class BlobContainer + { + public const string Default = GroupName + ".BlobContainer"; + + public const string Create = Default + ".Create"; + + public const string Delete = Default + ".Delete"; + } + + public class Blob + { + public const string Default = GroupName + ".Blob"; + + public const string Create = Default + ".Create"; + + public const string Delete = Default + ".Delete"; + + public const string Download = Default + ".Download"; + + public const string ManagePermissions = Default + ".ManagePermissions"; + + public static class Resources + { + public const string Name = "LINGYUN.Abp.BlobManagement.Blob"; + public const string Delete = Name + ".Delete"; + public const string View = Name + ".View"; + } + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN.Abp.BlobManagement.Application.csproj similarity index 66% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN.Abp.BlobManagement.Application.csproj index 1852601e8..ff36d34be 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN.Abp.BlobManagement.Application.csproj @@ -1,28 +1,29 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.Application - LINGYUN.Abp.OssManagement.Application - false - false - false - - - - - - - - - - - - - - - - + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.Application + LINGYUN.Abp.BlobManagement.Application + false + false + false + enable + + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationModule.cs new file mode 100644 index 000000000..c4fd74b79 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/AbpBlobManagementApplicationModule.cs @@ -0,0 +1,26 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Application; +using Volo.Abp.Caching; +using Volo.Abp.Mapperly; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn( + typeof(AbpBlobManagementDomainModule), + typeof(AbpBlobManagementApplicationContractsModule), + typeof(AbpCachingModule), + typeof(AbpMapperlyModule), + typeof(AbpDddApplicationModule))] +public class AbpBlobManagementApplicationModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.BlobPolicyCheckProviders.Add(PrivateBlobPolicyCheckProvider.ProviderName, new PrivateBlobPolicyCheckProvider()); + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppService.cs new file mode 100644 index 000000000..8dab178a9 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppService.cs @@ -0,0 +1,82 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.BlobManagement.Permissions; +using LINGYUN.Abp.Features.LimitValidation; +using System.Threading.Tasks; +using Volo.Abp.Content; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.BlobManagement; + +[RequiresFeature(BlobManagementFeatureNames.Blob.Enable)] +public class BlobAppService : BlobAppServiceBase, IBlobAppService +{ + public BlobAppService( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + : base(blobContainerRepository, blobRepository, blobManager) + { + CreatePolicyName = BlobManagementPermissionNames.Blob.Create; + DeletePolicyName = BlobManagementPermissionNames.Blob.Delete; + GetPolicyName = BlobManagementPermissionNames.Blob.Default; + GetListPolicyName = BlobManagementPermissionNames.Blob.Default; + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.UploadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.UploadLimit, + BlobManagementFeatureNames.Blob.UploadInterval, + LimitPolicy.Month)] + public async virtual Task CreateChunkFileAsync(BlobFileChunkCreateDto input) + { + await CheckCreatePolicyAsync(); + + await base.CreateChunkFileAsync(input.ContainerId.ToString(), input); + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.UploadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.UploadLimit, + BlobManagementFeatureNames.Blob.UploadInterval, + LimitPolicy.Month)] + public async virtual Task CreateFileAsync(BlobFileCreateDto input) + { + await CheckCreatePolicyAsync(); + + var blobContainer = await BlobContainerRepository.GetAsync(input.ContainerId); + + return await base.CreateFileAsync(blobContainer, input); + } + + public async virtual Task CreateFolderAsync(BlobFolderCreateDto input) + { + await CheckCreatePolicyAsync(); + + var blobContainer = await BlobContainerRepository.GetAsync(input.ContainerId); + + return await base.CreateFolderAsync(blobContainer, input); + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.DownloadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.DownloadLimit, + BlobManagementFeatureNames.Blob.DownloadInterval, + LimitPolicy.Month)] + public async virtual Task GetContentByNameAsync(BlobDownloadByNameInput input) + { + var blobContainer = await BlobContainerRepository.GetByNameAsync(input.ContainerName); + + return await base.GetContentByNameAsync(blobContainer, input.BlobName); + } + + protected async override Task CheckGetPolicyAsync(string containerName, Blob blob) + { + await base.CheckGetPolicyAsync(blob); + } + + protected override Task CheckDeletePolicyAsync(string containerName, Blob blob) + { + return base.CheckDeletePolicyAsync(blob); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppServiceBase.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppServiceBase.cs new file mode 100644 index 000000000..35d461b7f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobAppServiceBase.cs @@ -0,0 +1,243 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.BlobManagement.Permissions; +using LINGYUN.Abp.Features.LimitValidation; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq.Expressions; +using System.Threading.Tasks; +using System.Web; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.Features; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement; + +public abstract class BlobAppServiceBase : BlobManagementApplicationService +{ + protected virtual string? GetPolicyName { get; set; } + + protected virtual string? GetListPolicyName { get; set; } + + protected virtual string? CreatePolicyName { get; set; } + + protected virtual string? DeletePolicyName { get; set; } + + protected IBlobContainerRepository BlobContainerRepository { get; } + protected IBlobRepository BlobRepository { get; } + protected BlobManager BlobManager { get; } + + protected BlobAppServiceBase( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + { + BlobContainerRepository = blobContainerRepository; + BlobRepository = blobRepository; + BlobManager = blobManager; + } + + public async virtual Task DeleteAsync(Guid id) + { + var blob = await BlobRepository.GetAsync(id); + + await DeleteBlobAsync(blob); + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.DownloadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.DownloadLimit, + BlobManagementFeatureNames.Blob.DownloadInterval, + LimitPolicy.Month)] + public async virtual Task GetContentAsync(Guid id) + { + var blob = await BlobRepository.GetAsync(id); + + await CheckGetPolicyAsync(blob); + + var stream = await BlobManager.DownloadBlobsync(blob); + + return new RemoteStreamContent(stream ?? Stream.Null, blob.Name, blob.ContentType, blob.Size); + } + + public async virtual Task GetAsync(Guid id) + { + var blob = await BlobRepository.GetAsync(id); + + await CheckGetPolicyAsync(blob); + + return ObjectMapper.Map(blob); + } + + public async virtual Task> GetListAsync(BlobGetPagedListInput input) + { + await CheckGetListPolicyAsync(); + + Expression> expression = x => x.Provider == BlobManager.GetBlobProvider(); + + expression = expression + .And(x => x.ContainerId == input.ContainerId) + .And(x => x.ParentId == input.ParentId); + + if (input.Type.HasValue) + { + expression = expression.And(x => x.Type == input.Type); + } + if (!input.ContentType.IsNullOrWhiteSpace()) + { + expression = expression.And(x => x.ContentType == input.ContentType); + } + + var specification = new ExpressionSpecification(expression); + + var totalCount = await BlobRepository.GetCountAsync(specification); + var blobs = await BlobRepository.GetListAsync(specification, + input.Sorting, input.MaxResultCount, input.SkipCount); + + return new PagedResultDto(totalCount, + ObjectMapper.Map, List>(blobs)); + } + + protected async virtual Task CreateFileAsync(BlobContainer blobContainer, BlobFileCreateBaseDto input) + { + var blobStream = input.File.GetStream(); + + Blob? parentBlob = null; + if (input.ParentId.HasValue) + { + parentBlob = await BlobRepository.GetAsync(input.ParentId.Value); + } + + var blob = await BlobManager.CreateBlobAsync( + blobContainer, + input.Name, + BlobType.File, + blobStream.Length, + parentBlob); + + blob = await BlobManager.UploadBlobAsync(blobContainer, blob, blobStream, input.File.ContentType, input.CompareMd5); + + return ObjectMapper.Map(blob); + } + + protected async virtual Task CreateChunkFileAsync(string containerName, BlobFileChunkCreateBaseDto input) + { + await BlobManager.CreateChunkBlobAsync( + containerName, + input.Name, + input.File, + input.ChunkSize, + input.CurrentChunkSize, + input.ChunkNumber, + input.TotalChunks, + input.CompareMd5, + input.ParentId); + } + + protected async virtual Task CreateFolderAsync(BlobContainer blobContainer, BlobFolderCreateBaseDto input) + { + Blob? parentBlob = null; + if (input.ParentId.HasValue) + { + parentBlob = await BlobRepository.GetAsync(input.ParentId.Value); + } + var blob = await BlobManager.CreateBlobAsync( + blobContainer, + input.Name, + BlobType.Folder, + parentBlob: parentBlob); + + return ObjectMapper.Map(blob); + } + + protected async virtual Task GetContentByNameAsync(BlobContainer blobContainer, string name) + { + var blob = await FindBlobByNameAsync(blobContainer, name) + ?? throw new BusinessException( + BlobManagementErrorCodes.Blob.NameNotFound, + $"There is no file/directory named {name}!") + .WithData("Name", name); + + await CheckGetPolicyAsync(blobContainer.Name, blob); + + var stream = await BlobManager.DownloadBlobsync(blob); + + return new RemoteStreamContent(stream ?? Stream.Null, blob.Name, blob.ContentType, blob.Size); + } + + protected async virtual Task FindBlobByNameAsync(BlobContainer blobContainer, string name) + { + var blobName = HttpUtility.UrlDecode(name); + + return await BlobRepository.FindByFullNameAsync(blobName.EnsureStartsWith('/'), blobContainer.Id); + } + + protected async virtual Task DeleteBlobAsync(Blob blob) + { + await CheckDeletePolicyAsync(blob); + + await BlobManager.DeleteBlobAsync(blob); + } + + protected async virtual Task CheckGetPolicyAsync(Blob blob) + { + await CheckPolicyAsync(GetPolicyName); + } + + protected async virtual Task CheckGetListPolicyAsync() + { + await CheckPolicyAsync(GetListPolicyName); + } + + protected async virtual Task CheckCreatePolicyAsync() + { + await CheckPolicyAsync(CreatePolicyName); + } + + protected async virtual Task CheckDeletePolicyAsync(Blob blob) + { + await CheckPolicyAsync(DeletePolicyName); + } + + protected async virtual Task CheckGetPolicyAsync(string containerName, Blob blob) + { + var policyCheckProvider = GetBlobPolicyCheckProvider(containerName); + if (policyCheckProvider != null) + { + await policyCheckProvider.CheckAsync( + new BlobPolicyCheckContext( + LazyServiceProvider, + BlobManagementPermissionNames.Blob.Resources.View, + blob)); + } + } + + protected async virtual Task CheckDeletePolicyAsync(string containerName, Blob blob) + { + var policyCheckProvider = GetBlobPolicyCheckProvider(containerName); + if (policyCheckProvider != null) + { + await policyCheckProvider.CheckAsync( + new BlobPolicyCheckContext( + LazyServiceProvider, + BlobManagementPermissionNames.Blob.Resources.Delete, + blob)); + } + } + + protected virtual IBlobPolicyCheckProvider? GetBlobPolicyCheckProvider(string containerName) + { + var options = LazyServiceProvider.GetRequiredService>().Value; + if (options.BlobPolicyCheckProviders.TryGetValue(containerName, out var policyCheckProvider)) + { + return policyCheckProvider; + } + + return null; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobContainerAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobContainerAppService.cs new file mode 100644 index 000000000..6c81a87c5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobContainerAppService.cs @@ -0,0 +1,76 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Microsoft.Extensions.Options; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Expressions; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobContainerAppService : BlobManagementApplicationService, IBlobContainerAppService +{ + private readonly AbpBlobManagementOptions _options; + + private readonly IBlobContainerRepository _blobContainerRepository; + private readonly BlobManager _blobManager; + public BlobContainerAppService( + IOptions options, + IBlobContainerRepository blobContainerRepository, + BlobManager blobManager) + { + _blobContainerRepository = blobContainerRepository; + _blobManager = blobManager; + _options = options.Value; + } + + public async virtual Task CreateAsync(BlobContainerCreateDto input) + { + var blobContainer = await _blobManager.CreateContainerAsync(input.Name); + + return ObjectMapper.Map(blobContainer); + } + + public async virtual Task DeleteAsync(Guid id) + { + var blobContainer = await _blobContainerRepository.GetAsync(id); + + if (_options.StaticContainers.Contains(blobContainer.Name)) + { + throw new BusinessException( + BlobManagementErrorCodes.Container.DeleteWithStatic, + "The blob container is the system container and cannot be deleted!"); + } + + await _blobManager.DeleteContainerAsync(blobContainer); + } + + public async virtual Task GetAsync(Guid id) + { + var blobContainer = await _blobContainerRepository.GetAsync(id); + + return ObjectMapper.Map(blobContainer); + } + + public async virtual Task> GetListAsync(BlobContainerGetPagedListInput input) + { + Expression> expression = x => x.Provider == _blobManager.GetBlobProvider(); + + if (!input.Filter.IsNullOrWhiteSpace()) + { + expression = PredicateBuilder.And(expression, x => x.Name.Contains(input.Filter)); + } + + var specification = new ExpressionSpecification(expression); + + var totalCount = await _blobContainerRepository.GetCountAsync(specification); + var blobContainers = await _blobContainerRepository.GetListAsync(specification, + input.Sorting, input.MaxResultCount, input.SkipCount); + + return new PagedResultDto(totalCount, + ObjectMapper.Map, List>(blobContainers)); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationMappers.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationMappers.cs new file mode 100644 index 000000000..87d55cd8e --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationMappers.cs @@ -0,0 +1,22 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using Volo.Abp.ObjectExtending; + +namespace LINGYUN.Abp.BlobManagement; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties(DefinitionChecks = MappingPropertyDefinitionChecks.None)] +public partial class BlobContainerToBlobContainerDtoMapper : MapperBase +{ + public override partial BlobContainerDto Map(BlobContainer source); + public override partial void Map(BlobContainer source, BlobContainerDto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties(DefinitionChecks = MappingPropertyDefinitionChecks.None)] +public partial class BlobToBlobDtoMapper : MapperBase +{ + public override partial BlobDto Map(Blob source); + public override partial void Map(Blob source, BlobDto destination); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationService.cs new file mode 100644 index 000000000..941a9d92f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobManagementApplicationService.cs @@ -0,0 +1,13 @@ +using LINGYUN.Abp.BlobManagement.Localization; +using Volo.Abp.Application.Services; + +namespace LINGYUN.Abp.BlobManagement; + +public abstract class BlobManagementApplicationService : ApplicationService +{ + protected BlobManagementApplicationService() + { + LocalizationResource = typeof(BlobManagementResource); + ObjectMapperContext = typeof(AbpBlobManagementApplicationModule); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobWithoutContainerAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobWithoutContainerAppService.cs new file mode 100644 index 000000000..2b0d608ba --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/BlobWithoutContainerAppService.cs @@ -0,0 +1,103 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.Features.LimitValidation; +using System.Threading.Tasks; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.BlobManagement; + +public abstract class BlobWithoutContainerAppService : BlobAppServiceBase +{ + protected abstract string ContainerName { get; } + + protected BlobWithoutContainerAppService( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + : base(blobContainerRepository, blobRepository, blobManager) + { + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.UploadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.UploadLimit, + BlobManagementFeatureNames.Blob.UploadInterval, + LimitPolicy.Month)] + public async virtual Task CreateChunkFileAsync(BlobFileChunkCreateWithoutContainerDto input) + { + await CheckCreatePolicyAsync(); + + await base.CreateChunkFileAsync(ContainerName, input); + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.UploadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.UploadLimit, + BlobManagementFeatureNames.Blob.UploadInterval, + LimitPolicy.Month)] + public async virtual Task CreateFileAsync(BlobFileCreateWithoutContainerDto input) + { + await CheckCreatePolicyAsync(); + + var blobContainer = await GetOrCreateContainer(); + + return await base.CreateFileAsync(blobContainer, input); + } + + public async virtual Task CreateFolderAsync(BlobFolderCreateWithoutContainerDto input) + { + await CheckCreatePolicyAsync(); + + var blobContainer = await GetOrCreateContainer(); + + return await base.CreateFolderAsync(blobContainer, input); + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.DownloadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.DownloadLimit, + BlobManagementFeatureNames.Blob.DownloadInterval, + LimitPolicy.Month)] + public async virtual Task GetContentByNameAsync(string name) + { + var blobContainer = await BlobContainerRepository.GetByNameAsync(ContainerName); + + return await base.GetContentByNameAsync(blobContainer, name); + } + + public async virtual Task> GetListAsync(BlobGetPagedListWithoutContainerInput input) + { + var blobContainer = await GetOrCreateContainer(); + + return await base.GetListAsync(new BlobGetPagedListInput + { + SkipCount = input.SkipCount, + MaxResultCount = input.MaxResultCount, + Sorting = input.Sorting, + ContentType = input.ContentType, + ParentId = input.ParentId, + Type = input.Type, + ContainerId = blobContainer.Id, + }); + } + + protected async virtual Task GetOrCreateContainer() + { + var blobContainer = await BlobContainerRepository.FindByNameAsync(ContainerName) + ?? await BlobManager.CreateContainerAsync(ContainerName); + + return blobContainer; + } + + protected async override Task CheckGetPolicyAsync(Blob blob) + { + await CheckGetPolicyAsync(ContainerName, blob); + } + + protected async override Task CheckDeletePolicyAsync(Blob blob) + { + await CheckDeletePolicyAsync(ContainerName, blob); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationService.cs new file mode 100644 index 000000000..9bfa786c4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationService.cs @@ -0,0 +1,217 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using LINGYUN.Abp.Features.LimitValidation; +using Microsoft.Extensions.Logging; +using System; +using System.Collections.Generic; +using System.IO; +using System.Linq; +using System.Threading.Tasks; +using System.Web; +using Volo.Abp; +using Volo.Abp.Content; +using Volo.Abp.Domain.ChangeTracking; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.BlobManagement.Integration; + +[RequiresFeature(BlobManagementFeatureNames.Blob.Enable)] +public class BlobIntegrationService : BlobAppServiceBase, IBlobIntegrationService +{ + public BlobIntegrationService( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + : base(blobContainerRepository, blobRepository, blobManager) + { + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.UploadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.UploadLimit, + BlobManagementFeatureNames.Blob.UploadInterval, + LimitPolicy.Month)] + public async virtual Task CreateAsync(BlobFileCreateIntegrationDto input) + { + var blobContainer = await BlobContainerRepository.GetByNameAsync(input.ContainerName); + + // Example: /a/b/c/d/f.txt + var blobName = HttpUtility.UrlDecode(input.BlobName); + var blobPath = blobName; + var pathIndex = blobName.LastIndexOf('/'); + if (pathIndex > 0) + { + // /a/b/c/d + blobPath = blobName.Substring(0, pathIndex); + // f.txt + blobName = blobName.Substring(pathIndex + 1); + } + + // New: ["/a/b/c/d", "/a/b/c", "/a/b", "/a"] + // Return: "/a/b/c/d" + var parentBlob = await GetOrCreateParentBlobAsync(blobContainer, blobPath); + + var blobStream = input.File.GetStream(); + + var blob = await BlobManager.CreateBlobAsync( + blobContainer, + blobName, + BlobType.File, + blobStream.Length, + parentBlob, + input.Overwrite == true); + + await BlobManager.UploadBlobAsync(blobContainer, blob, blobStream, input.File.ContentType); + + return ObjectMapper.Map(blob); + } + + public async virtual Task DeleteAsync(BlobFileGetByNameIntegrationDto input) + { + var blobContainer = await BlobContainerRepository.GetByNameAsync(input.ContainerName); + + var blob = await FindBlobByNameAsync(blobContainer, input.BlobName) + ?? throw new BusinessException( + BlobManagementErrorCodes.Blob.NameNotFound, + $"There is no file/directory named {input.BlobName}!") + .WithData("Name", input.BlobName); + + await CheckDeletePolicyAsync(blobContainer.Name, blob); + + await DeleteBlobAsync(blob); + } + + [DisableEntityChangeTracking] + public async virtual Task ExistsAsync(BlobFileGetByNameIntegrationDto input) + { + try + { + return await BlobRepository.ExistsAsync(input.ContainerName, input.BlobName); + } + catch (Exception ex) + { + Logger.LogWarning(ex, "Failed to load the Blob: {message}", ex.Message); + return false; + } + } + + [RequiresFeature(BlobManagementFeatureNames.Blob.DownloadFile)] + [RequiresLimitFeature( + BlobManagementFeatureNames.Blob.DownloadLimit, + BlobManagementFeatureNames.Blob.DownloadInterval, + LimitPolicy.Month)] + public async virtual Task GetContentAsync(BlobFileGetByNameIntegrationDto input) + { + try + { + var blobContainer = await BlobContainerRepository.GetByNameAsync(input.ContainerName); + return await GetContentByNameAsync(blobContainer, input.BlobName); + } + catch (Exception ex) + { + Logger.LogWarning(ex, "Failed to load the Blob: {message}", ex.Message); + + return new RemoteStreamContent(Stream.Null); + } + } + + protected async virtual Task GetOrCreateParentBlobAsync(BlobContainer blobContainer, string blobPath) + { + var normalizedPath = blobPath.EnsureStartsWith('/').TrimEnd('/'); + + var allPaths = GetAllPathLevels(normalizedPath); + + var existingFolders = await BlobRepository.GetFolderListAsync(allPaths, blobContainer.Id); + + var allFolders = await CreateMissingFoldersAsync( + blobContainer, + allPaths, + existingFolders + ); + + return allFolders.Last(); + } + + private async Task> CreateMissingFoldersAsync( + BlobContainer blobContainer, + List allPaths, + List existingFolders) + { + var existingDict = existingFolders.ToDictionary(x => x.FullName, x => x); + var result = new List(); + var needInsert = new List(); + + for (var i = 0; i < allPaths.Count; i++) + { + var currentPath = allPaths[i]; + + if (existingDict.TryGetValue(currentPath, out var existingFolder)) + { + result.Add(existingFolder); + } + else + { + var folderName = GetFolderNameFromPath(currentPath); + var parentPath = i > 0 ? allPaths[i - 1] : "/"; + var parentFolder = i > 0 ? result[i - 1] : null; + + var newFolder = await BlobManager.CreateBlobAsync( + blobContainer, + folderName, + BlobType.Folder, + parentBlob: parentFolder); + + newFolder.SetFullName(currentPath); + newFolder.SetProvider(blobContainer.Provider); + + needInsert.Add(newFolder); + result.Add(newFolder); + + existingDict[currentPath] = newFolder; + } + } + + if (needInsert.Count > 0) + { + await BlobRepository.InsertManyAsync(needInsert, autoSave: true); + } + + return result; + } + + private static List GetAllPathLevels(string path) + { + var levels = new List(); + var normalizedPath = path.EnsureStartsWith('/').TrimEnd('/'); + + if (normalizedPath.IsNullOrEmpty()) + { + return levels; + } + + var segments = normalizedPath.Split('/', StringSplitOptions.RemoveEmptyEntries); + var currentPath = "/"; + + foreach (var segment in segments) + { + currentPath = currentPath.EnsureEndsWith('/') + segment; + levels.Add(currentPath); + } + + return levels; + } + + private static string GetFolderNameFromPath(string path) + { + var normalizedPath = path.EnsureEndsWith('/').TrimEnd('/'); + var lastSlashIndex = normalizedPath.LastIndexOf('/'); + + if (lastSlashIndex < 0 || lastSlashIndex == normalizedPath.Length - 1) + { + return normalizedPath; + } + + return normalizedPath.Substring(lastSlashIndex + 1); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobAppService.cs new file mode 100644 index 000000000..e7072ec8c --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobAppService.cs @@ -0,0 +1,19 @@ +using LINGYUN.Abp.BlobManagement.Features; +using Microsoft.AspNetCore.Authorization; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.BlobManagement; + +[Authorize] +[RequiresFeature(BlobManagementFeatureNames.Blob.Enable)] +public class PrivateBlobAppService : BlobWithoutContainerAppService, IPrivateBlobAppService +{ + protected override string ContainerName => "users"; + public PrivateBlobAppService( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + : base(blobContainerRepository, blobRepository, blobManager) + { + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobPolicyCheckProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobPolicyCheckProvider.cs new file mode 100644 index 000000000..a2ee72b21 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PrivateBlobPolicyCheckProvider.cs @@ -0,0 +1,17 @@ +using Microsoft.AspNetCore.Authorization; +using Microsoft.Extensions.DependencyInjection; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.BlobManagement; + +public class PrivateBlobPolicyCheckProvider : IBlobPolicyCheckProvider +{ + public const string ProviderName = "users"; + public string Name => ProviderName; + + public async virtual Task CheckAsync(BlobPolicyCheckContext context) + { + var authorizationService = context.ServiceProvider.GetRequiredService(); + await authorizationService.CheckAsync(context.Blob, context.PolicyName); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PublicBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PublicBlobAppService.cs new file mode 100644 index 000000000..ca63fd966 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Application/LINGYUN/Abp/BlobManagement/PublicBlobAppService.cs @@ -0,0 +1,30 @@ +using LINGYUN.Abp.BlobManagement.Features; +using System.Threading.Tasks; +using Volo.Abp.Features; + +namespace LINGYUN.Abp.BlobManagement; + +[RequiresFeature(BlobManagementFeatureNames.Blob.Enable)] +public class PublicBlobAppService : BlobWithoutContainerAppService, IPublicBlobAppService +{ + protected override string ContainerName => "public"; + + public PublicBlobAppService( + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + : base(blobContainerRepository, blobRepository, blobManager) + { + } + + protected override Task CheckGetPolicyAsync(string containerName, Blob blob) + { + // 公共文件访问不校验权限 + return Task.CompletedTask; + } + + protected override Task CheckDeletePolicyAsync(string containerName, Blob blob) + { + return base.CheckDeletePolicyAsync(blob); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN.Abp.BlobManagement.Domain.Shared.csproj similarity index 67% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN.Abp.BlobManagement.Domain.Shared.csproj index 2c08d9e1c..f42e52994 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN.Abp.OssManagement.Domain.Shared.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN.Abp.BlobManagement.Domain.Shared.csproj @@ -5,20 +5,18 @@ netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 - LINGYUN.Abp.OssManagement.Domain.Shared - LINGYUN.Abp.OssManagement.Domain.Shared + LINGYUN.Abp.BlobManagement.Domain.Shared + LINGYUN.Abp.BlobManagement.Domain.Shared false false false + enable - - - - - + + diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainSharedModule.cs similarity index 55% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainSharedModule.cs index 6f6930b7d..5ffc8969a 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/AbpOssManagementDomainSharedModule.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainSharedModule.cs @@ -1,35 +1,35 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Volo.Abp.Features; -using Volo.Abp.Localization; -using Volo.Abp.Localization.ExceptionHandling; -using Volo.Abp.Modularity; -using Volo.Abp.Validation; -using Volo.Abp.VirtualFileSystem; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpFeaturesModule), - typeof(AbpValidationModule))] -public class AbpOssManagementDomainSharedModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.FileSets.AddEmbedded(); - }); - - Configure(options => - { - options.Resources - .Add("en") - .AddVirtualJson("/LINGYUN/Abp/OssManagement/Localization/Resources"); - }); - - Configure(options => - { - options.MapCodeNamespace(OssManagementErrorCodes.Namespace, typeof(AbpOssManagementResource)); - }); - } -} +using LINGYUN.Abp.BlobManagement.Localization; +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Localization.ExceptionHandling; +using Volo.Abp.Modularity; +using Volo.Abp.Validation; +using Volo.Abp.VirtualFileSystem; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn( + typeof(AbpFeaturesModule), + typeof(AbpValidationModule))] +public class AbpBlobManagementDomainSharedModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + + Configure(options => + { + options.Resources + .Add("en") + .AddVirtualJson("/LINGYUN/Abp/BlobManagement/Localization/Resources"); + }); + + Configure(options => + { + options.MapCodeNamespace(BlobManagementErrorCodes.Namespace, typeof(BlobManagementResource)); + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobConsts.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobConsts.cs new file mode 100644 index 000000000..2957b17b0 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobConsts.cs @@ -0,0 +1,9 @@ +namespace LINGYUN.Abp.BlobManagement; + +public static class BlobConsts +{ + public static int MaxNameLength { get; set; } = 256; + public static int MaxFullNameLength { get; set; } = 256; + public static int MaxProviderLength { get; set; } = 64; + public static int MaxContentTypeLength { get; set; } = 128; +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerConsts.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerConsts.cs new file mode 100644 index 000000000..fd3795dd4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerConsts.cs @@ -0,0 +1,7 @@ +namespace LINGYUN.Abp.BlobManagement; + +public static class BlobContainerConsts +{ + public static int MaxNameLength { get; set; } = 128; + public static int MaxProviderLength { get; set; } = 64; +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerEto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerEto.cs new file mode 100644 index 000000000..657dd6b12 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobContainerEto.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobContainerEto : IMultiTenant +{ + public Guid? TenantId { get; set; } + public Guid Id { get; set; } + public BlobContainerEto() + { + + } + + public BlobContainerEto(Guid id, Guid? tenantId = null) + { + Id = id; + TenantId = tenantId; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobDownloadEto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobDownloadEto.cs new file mode 100644 index 000000000..03d5d2d0a --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobDownloadEto.cs @@ -0,0 +1,22 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobDownloadEto : IMultiTenant +{ + public Guid? TenantId { get; set; } + public string ContainerName { get; set; } + public string FullName { get; set; } + public BlobDownloadEto() + { + + } + + public BlobDownloadEto(string containerName, string fullName, Guid? tenantId = null) + { + ContainerName = containerName; + FullName = fullName; + TenantId = tenantId; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobEto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobEto.cs new file mode 100644 index 000000000..022bb88e5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobEto.cs @@ -0,0 +1,20 @@ +using System; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobEto : IMultiTenant +{ + public Guid? TenantId { get; set; } + public Guid Id { get; set; } + public BlobEto() + { + + } + + public BlobEto(Guid id, Guid? tenantId = null) + { + Id = id; + TenantId = tenantId; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobManagementErrorCodes.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobManagementErrorCodes.cs new file mode 100644 index 000000000..0e2fcf1a2 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobManagementErrorCodes.cs @@ -0,0 +1,27 @@ +namespace LINGYUN.Abp.BlobManagement; + +public static class BlobManagementErrorCodes +{ + public const string Namespace = "BlobManagement"; + + public static class Container + { + public const string Prefix = Namespace + ":001"; + public const string NameAlreadyExists = Prefix + "001"; + public const string DeleteWithNotEmpty = Prefix + "002"; + public const string DeleteWithStatic = Prefix + "003"; + public const string NameNotFound = Prefix + "004"; + } + + public static class Blob + { + public const string Prefix = Namespace + ":002"; + public const string NonFolderChildBlob = Prefix + "001"; + public const string NameAlreadyExists = Prefix + "002"; + public const string DeleteWithNotEmpty = Prefix + "003"; + public const string NameNotFound = Prefix + "004"; + public const string BlobHashValidFailed = Prefix + "005"; + public const string UploadFileSizeTooLong = Prefix + "006"; + public const string UploadFileExtendCanNotBeMatch = Prefix + "007"; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobType.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobType.cs new file mode 100644 index 000000000..8dff65d94 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/BlobType.cs @@ -0,0 +1,21 @@ +using System.ComponentModel; + +namespace LINGYUN.Abp.BlobManagement; + +/// +/// 对象类型 +/// +[Description("对象类型")] +public enum BlobType +{ + /// + /// 目录 + /// + [Description("目录")] + Folder = 0, + /// + /// 文件 + /// + [Description("文件")] + File = 1 +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureDefinitionProvider.cs similarity index 51% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureDefinitionProvider.cs index 1dc21ed43..7109dc899 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureDefinitionProvider.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureDefinitionProvider.cs @@ -1,87 +1,79 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Volo.Abp.Features; -using Volo.Abp.Localization; -using Volo.Abp.Validation.StringValues; - -namespace LINGYUN.Abp.OssManagement.Features; - -public class AbpOssManagementFeatureDefinitionProvider : FeatureDefinitionProvider -{ - public override void Define(IFeatureDefinitionContext context) - { - var featureGroup = context.AddGroup( - name: AbpOssManagementFeatureNames.GroupName, - displayName: L("Features:OssManagement")); - - featureGroup.AddFeature( - name: AbpOssManagementFeatureNames.PublicAccess, - defaultValue: false.ToString(), - displayName: L("Features:DisplayName:PublicAccess"), - description: L("Features:Description:PublicAccess"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - - var ossDefaultFeature = featureGroup.AddFeature( - name: AbpOssManagementFeatureNames.OssObject.Enable, - defaultValue: true.ToString(), - displayName: L("Features:DisplayName:OssObject"), - description: L("Features:Description:OssObject"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.AllowSharedFile, - defaultValue: false.ToString(), - displayName: L("Features:DisplayName:AllowSharedFile"), - description: L("Features:Description:AllowSharedFile"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.DownloadFile, - defaultValue: false.ToString(), - displayName: L("Features:DisplayName:DownloadFile"), - description: L("Features:Description:DownloadFile"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.DownloadLimit, - defaultValue: "1000", - displayName: L("Features:DisplayName:DownloadLimit"), - description: L("Features:Description:DownloadLimit"), - valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.DownloadInterval, - defaultValue: "1", - displayName: L("Features:DisplayName:DownloadInterval"), - description: L("Features:Description:DownloadInterval"), - valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月 - - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.UploadFile, - defaultValue: true.ToString(), - displayName: L("Features:DisplayName:UploadFile"), - description: L("Features:Description:UploadFile"), - valueType: new ToggleStringValueType(new BooleanValueValidator())); - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.UploadLimit, - defaultValue: "1000", - displayName: L("Features:DisplayName:UploadLimit"), - description: L("Features:Description:UploadLimit"), - valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 - ossDefaultFeature.CreateChild( - name: AbpOssManagementFeatureNames.OssObject.UploadInterval, - defaultValue: "1", - displayName: L("Features:DisplayName:UploadInterval"), - description: L("Features:Description:UploadInterval"), - valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月 - - // TODO: 此功能需要控制器协同,暂时不实现 - //fileSystemFeature.CreateChild( - // name: AbpOssManagementFeatureNames.OssObject.MaxUploadFileCount, - // defaultValue: 1.ToString(), - // displayName: L("Features:DisplayName:MaxUploadFileCount"), - // description: L("Features:Description:MaxUploadFileCount"), - // valueType: new FreeTextStringValueType(new NumericValueValidator(1, 10))); - } - - protected ILocalizableString L(string name) - { - return LocalizableString.Create(name); - } -} +using LINGYUN.Abp.BlobManagement.Localization; +using Volo.Abp.Features; +using Volo.Abp.Localization; +using Volo.Abp.Validation.StringValues; + +namespace LINGYUN.Abp.BlobManagement.Features; + +public class BlobManagementFeatureDefinitionProvider : FeatureDefinitionProvider +{ + public override void Define(IFeatureDefinitionContext context) + { + var featureGroup = context.AddGroup( + name: BlobManagementFeatureNames.GroupName, + displayName: L("Features:BlobManagement")); + + featureGroup.AddFeature( + name: BlobManagementFeatureNames.Enable, + defaultValue: true.ToString(), + displayName: L("Features:DisplayName:EnableBlobManagement"), + description: L("Features:Description:EnableBlobManagement"), + valueType: new ToggleStringValueType(new BooleanValueValidator())); + featureGroup.AddFeature( + name: BlobManagementFeatureNames.PublicAccess, + defaultValue: false.ToString(), + displayName: L("Features:DisplayName:PublicAccess"), + description: L("Features:Description:PublicAccess"), + valueType: new ToggleStringValueType(new BooleanValueValidator())); + + var blobDefaultFeature = featureGroup.AddFeature( + name: BlobManagementFeatureNames.Blob.Enable, + defaultValue: true.ToString(), + displayName: L("Features:DisplayName:EnableBlob"), + description: L("Features:Description:EnableBlob"), + valueType: new ToggleStringValueType(new BooleanValueValidator())); + + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.DownloadFile, + defaultValue: true.ToString(), + displayName: L("Features:DisplayName:DownloadFile"), + description: L("Features:Description:DownloadFile"), + valueType: new ToggleStringValueType(new BooleanValueValidator())); + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.DownloadLimit, + defaultValue: "1000", + displayName: L("Features:DisplayName:DownloadLimit"), + description: L("Features:Description:DownloadLimit"), + valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.DownloadInterval, + defaultValue: "1", + displayName: L("Features:DisplayName:DownloadInterval"), + description: L("Features:Description:DownloadInterval"), + valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月 + + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.UploadFile, + defaultValue: true.ToString(), + displayName: L("Features:DisplayName:UploadFile"), + description: L("Features:Description:UploadFile"), + valueType: new ToggleStringValueType(new BooleanValueValidator())); + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.UploadLimit, + defaultValue: "1000", + displayName: L("Features:DisplayName:UploadLimit"), + description: L("Features:Description:UploadLimit"), + valueType: new FreeTextStringValueType(new NumericValueValidator(0, 100_0000))); // 上限100万次调用 + blobDefaultFeature.CreateChild( + name: BlobManagementFeatureNames.Blob.UploadInterval, + defaultValue: "1", + displayName: L("Features:DisplayName:UploadInterval"), + description: L("Features:Description:UploadInterval"), + valueType: new FreeTextStringValueType(new NumericValueValidator(1, 12))); // 上限12月 + } + + protected ILocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureNames.cs similarity index 77% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureNames.cs index 012f1e4a1..adfd8d833 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Features/AbpOssManagementFeatureNames.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Features/BlobManagementFeatureNames.cs @@ -1,49 +1,51 @@ -namespace LINGYUN.Abp.OssManagement.Features; - -public class AbpOssManagementFeatureNames -{ - public const string GroupName = "AbpOssManagement"; - /// - /// 是否允许未经授权的用户访问公共目录 - /// - public const string PublicAccess = GroupName + ".PublicAccess"; - - public class OssObject - { - public const string Default = GroupName + ".OssObject"; - - public const string Enable = Default + ".Enable"; - /// - /// 允许用户分享文件 - /// - public const string AllowSharedFile = Default + ".AllowSharedFile"; - /// - /// 下载文件功能 - /// - public const string DownloadFile = Default + ".DownloadFile"; - /// - /// 下载文件功能限制次数 - /// - public const string DownloadLimit = Default + ".DownloadLimit"; - /// - /// 下载文件功能限制次数周期 - /// - public const string DownloadInterval = Default + ".DownloadInterval"; - /// - /// 上传文件功能 - /// - public const string UploadFile = Default + ".UploadFile"; - /// - /// 上传文件功能限制次数 - /// - public const string UploadLimit = Default + ".UploadLimit"; - /// - /// 上传文件功能限制次数周期 - /// - public const string UploadInterval = Default + ".UploadInterval"; - /// - /// 最大上传文件 - /// - public const string MaxUploadFileCount = Default + ".MaxUploadFileCount"; - } -} +namespace LINGYUN.Abp.BlobManagement.Features; + +public static class BlobManagementFeatureNames +{ + public const string GroupName = "AbpBlobManagement"; + /// + /// 启用对象存储管理 + /// + public const string Enable = GroupName + ".Enable"; + /// + /// 是否允许未经授权的用户访问公共目录 + /// + public const string PublicAccess = GroupName + ".PublicAccess"; + + public class Blob + { + public const string Default = GroupName + ".Blob"; + /// + /// 启用Blob + /// + public const string Enable = Default + ".Enable"; + /// + /// 下载文件功能 + /// + public const string DownloadFile = Default + ".DownloadFile"; + /// + /// 下载文件功能限制次数 + /// + public const string DownloadLimit = Default + ".DownloadLimit"; + /// + /// 下载文件功能限制次数周期 + /// + public const string DownloadInterval = Default + ".DownloadInterval"; + /// + /// 上传文件功能 + /// + public const string UploadFile = Default + ".UploadFile"; + /// + /// 上传文件功能限制次数 + /// + public const string UploadLimit = Default + ".UploadLimit"; + /// + /// 上传文件功能限制次数周期 + /// + public const string UploadInterval = Default + ".UploadInterval"; + /// + /// 最大上传文件 + /// + public const string MaxUploadFileCount = Default + ".MaxUploadFileCount"; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/BlobManagementResource.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/BlobManagementResource.cs new file mode 100644 index 000000000..5438a08cf --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/BlobManagementResource.cs @@ -0,0 +1,8 @@ +using Volo.Abp.Localization; + +namespace LINGYUN.Abp.BlobManagement.Localization; + +[LocalizationResourceName("BlobManagement")] +public class BlobManagementResource +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/en.json b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/en.json new file mode 100644 index 000000000..cd79e95ae --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/en.json @@ -0,0 +1,75 @@ +{ + "culture": "en", + "texts": { + "Permission:BlobManagement": "Blob Management", + "Permission:BlobContainer": "Blob Container", + "Permission:Blob": "Blob", + "Permission:Create": "Create", + "Permission:Delete": "Delete", + "Permission:Upload": "Upload", + "Permission:Download": "Download", + "Permission:Blob:Delete": "Delete Blob", + "Permission:Blob:View": "View Blob", + "Features:BlobManagement": "Blob Management", + "Features:DisplayName:EnableBlobManagement": "Enable Blob Management", + "Features:Description:EnableBlobManagement": "Enable to give the application the ability to have an blob storage module.", + "Features:DisplayName:PublicAccess": "Public Access", + "Features:Description:PublicAccess": "Whether to allow unauthorized users to access public directories", + "Features:DisplayName:EnableBlob": "Enable Blob", + "Features:Description:EnableBlob": "Enable to allow the application to access the blob storage", + "Features:DisplayName:DownloadFile": "Download file", + "Features:Description:DownloadFile": "Whether to allow users to download files", + "Features:DisplayName:DownloadLimit": "Limit Of Downloads", + "Features:Description:DownloadLimit": "Limits the total number of times a file is downloaded within a specified period", + "Features:DisplayName:DownloadInterval": "Limit Downloads Interval", + "Features:Description:DownloadInterval": "The update period that limits the number of files downloaded. The time scale is: month. Default: 1", + "Features:DisplayName:UploadFile": "Upload file", + "Features:Description:UploadFile": "Whether to allow users to upload files", + "Features:DisplayName:UploadLimit": "Limit Of Uploads", + "Features:Description:UploadLimit": "Limits the total number of file uploads within a specified period", + "Features:DisplayName:UploadInterval": "Limit Uploads Interval", + "Features:Description:UploadInterval": "The update period that limits the number of files uploaded. The time scale is: month. Default: 1", + "BlobManagement:001001": "A blob container named {Name} already exists!", + "BlobManagement:001002": "The blob container is not empty and cannot be deleted!", + "BlobManagement:001003": "The blob container is the system container and cannot be deleted!", + "BlobManagement:001004": "There is no blob container named {Name}!", + "BlobManagement:002001": "Sub-files/directories cannot be added to non-directory types!", + "BlobManagement:002002": "There is already a file/directory named {Name} in the current directory!", + "BlobManagement:002003": "The current directory is not empty and cannot be deleted!", + "BlobManagement:002004": "There is no file/directory named {Name}!", + "BlobManagement:002005": "File fingerprint verification failed. Please check the file's legitimacy!", + "BlobManagement:002006": "Upload file size cannot exceed {Limit} MB!", + "BlobManagement:002007": "Not allowed file extension: {Name}!", + "BlobContainers": "Blob Containers", + "BlobContainers:Create": "New Container", + "Blobs:Files": "Files", + "Blobs:Folder": "Folder", + "Blobs:RootFolder": "Root Folder", + "Blobs:SelectContainer": "Choose a container", + "Blobs:CreateFolder": "New Folder", + "Blobs:UploadFile": "Upload File", + "Blobs:SelectFile": "Choose file", + "Blobs:Preview": "Preview", + "Blobs:Download": "Download", + "DisplayName:FileLimitLength": "File limit size", + "Description:FileLimitLength": "Limit size of uploaded file in MB", + "DisplayName:AllowFileExtensions": "File extension", + "Description:AllowFileExtensions": "List of allowed extensions to upload files, with multiple extensions separated by, don't need a notation", + "DisplayName:BlobManagement": "Blob Management", + "DisplayName:Blobs": "Blobs", + "DisplayName:CreationTime": "Creation Time", + "DisplayName:BlobType": "Blob Type", + "DisplayName:LastModificationTime": "Last Modification Time", + "DisplayName:Name": "Name", + "DisplayName:Path": "Path", + "DisplayName:Size": "Size", + "DisplayName:UploadStatus": "Upload Status", + "BlobType:Folder": "Folder", + "BlobType:File": "File", + "UploadStatus:Completed": "Completed", + "UploadStatus:Error": "Error", + "UploadStatus:Pause": "Pause", + "BlobWellDownloadMessage": "The file download is about to start.", + "BlobCanNotPreviewMessage": "This file does not support previewing. Please download it and view it!" + } +} \ No newline at end of file diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/zh-Hans.json new file mode 100644 index 000000000..4d1bf8b24 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Localization/Resources/zh-Hans.json @@ -0,0 +1,75 @@ +{ + "culture": "zh-Hans", + "texts": { + "Permission:BlobManagement": "对象存储", + "Permission:BlobContainer": "存储容器管理", + "Permission:Blob": "存储对象管理", + "Permission:Create": "新增", + "Permission:Delete": "删除", + "Permission:Upload": "上传", + "Permission:Download": "下载", + "Permission:Blob:Delete": "删除存储对象", + "Permission:Blob:View": "查看存储对象", + "Features:BlobManagement": "对象存储", + "Features:DisplayName:EnableBlobManagement": "启用对象存储", + "Features:Description:EnableBlobManagement": "启用以使应用程序拥有对象存储模块的能力.", + "Features:DisplayName:PublicAccess": "公共访问", + "Features:Description:PublicAccess": "是否允许未经授权的用户访问公共目录", + "Features:DisplayName:EnableBlob": "启用Blob", + "Features:Description:EnableBlob": "启用以使应用程序可以访问对象存储", + "Features:DisplayName:DownloadFile": "下载文件", + "Features:Description:DownloadFile": "是否允许用户下载文件", + "Features:DisplayName:DownloadLimit": "限制下载文件次数", + "Features:Description:DownloadLimit": "在指定的周期内限制下载文件的总次数", + "Features:DisplayName:DownloadInterval": "限制下载文件周期", + "Features:Description:DownloadInterval": "限制下载文件次数的更新周期,时间刻度为:月,默认:1", + "Features:DisplayName:UploadFile": "上传文件", + "Features:Description:UploadFile": "是否允许用户上传文件", + "Features:DisplayName:UploadLimit": "限制上传文件次数", + "Features:Description:UploadLimit": "在指定的周期内限制上传文件的总次数", + "Features:DisplayName:UploadInterval": "限制上传文件周期", + "Features:Description:UploadInterval": "限制上传文件次数的更新周期,时间刻度为:月,默认:1", + "BlobManagement:001001": "已经存在名为 {Name} 的存储容器!", + "BlobManagement:001002": "存储容器非空,不可删除!", + "BlobManagement:001003": "存储容器为系统容器,不可删除!", + "BlobManagement:001004": "不存在名为 {Name} 的存储容器!", + "BlobManagement:002001": "非目录类型不可添加子文件/目录!", + "BlobManagement:002002": "当前目录中已存在名为 {Name} 的文件/目录!", + "BlobManagement:002003": "当前目录非空,不可删除!", + "BlobManagement:002004": "不存在名为 {Name} 的文件/目录!", + "BlobManagement:002005": "文件指纹验证失败,请检查文件合法性!", + "BlobManagement:002006": "上传文件大小不能超过 {Limit} MB!", + "BlobManagement:002007": "不被允许的文件扩展名: {Name}!", + "BlobContainers": "存储容器", + "BlobContainers:Create": "新增容器", + "Blobs:Files": "文件列表", + "Blobs:Folder": "目录", + "Blobs:RootFolder": "根目录", + "Blobs:SelectContainer": "选择一个容器", + "Blobs:CreateFolder": "新建文件夹", + "Blobs:UploadFile": "上传文件", + "Blobs:SelectFile": "选择文件", + "Blobs:Preview": "预览", + "Blobs:Download": "下载", + "DisplayName:FileLimitLength": "文件限制大小", + "Description:FileLimitLength": "上传文件的限制大小,单位(MB)", + "DisplayName:AllowFileExtensions": "文件扩展名", + "Description:AllowFileExtensions": "允许的上传文件扩展名列表,多个扩展名以,分隔,无需输入.符号", + "DisplayName:BlobManagement": "对象存储", + "DisplayName:Blobs": "存储管理", + "DisplayName:CreationTime": "创建时间", + "DisplayName:BlobType": "存储类型", + "DisplayName:LastModificationTime": "修改时间", + "DisplayName:Name": "名称", + "DisplayName:Path": "路径", + "DisplayName:Size": "大小", + "DisplayName:UploadStatus": "上传状态", + "BlobType:Folder": "文件夹", + "BlobType:File": "文件", + "UploadStatus:Completed": "完成", + "UploadStatus:Error": "错误", + "UploadStatus:Pause": "暂停", + "BlobWellDownloadMessage": "即将开始下载文件.", + "BlobCanNotPreviewMessage": "此文件不支持预览,请下载后查看!" + } +} \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingDefinitionProvider.cs similarity index 55% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingDefinitionProvider.cs index a4e0f303a..9160143dd 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingDefinitionProvider.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingDefinitionProvider.cs @@ -1,47 +1,47 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Volo.Abp.Localization; -using Volo.Abp.Settings; - -namespace LINGYUN.Abp.OssManagement.Settings; - -public class AbpOssManagementSettingDefinitionProvider : SettingDefinitionProvider -{ - public override void Define(ISettingDefinitionContext context) - { - context.Add(CreateFileSystemSettings()); - } - - protected SettingDefinition[] CreateFileSystemSettings() - { - return new SettingDefinition[] - { - new SettingDefinition( - name: AbpOssManagementSettingNames.FileLimitLength, - defaultValue: AbpOssManagementSettingNames.DefaultFileLimitLength.ToString(), - displayName: L("DisplayName:FileLimitLength"), - description: L("Description:FileLimitLength"), - isVisibleToClients: true) - .WithProviders( - DefaultValueSettingValueProvider.ProviderName, - ConfigurationSettingValueProvider.ProviderName, - GlobalSettingValueProvider.ProviderName, - TenantSettingValueProvider.ProviderName), - new SettingDefinition( - name: AbpOssManagementSettingNames.AllowFileExtensions, - defaultValue: AbpOssManagementSettingNames.DefaultAllowFileExtensions, - displayName: L("DisplayName:AllowFileExtensions"), - description: L("Description:AllowFileExtensions"), - isVisibleToClients: true) - .WithProviders( - DefaultValueSettingValueProvider.ProviderName, - ConfigurationSettingValueProvider.ProviderName, - GlobalSettingValueProvider.ProviderName, - TenantSettingValueProvider.ProviderName), - }; - } - - protected LocalizableString L(string name) - { - return LocalizableString.Create(name); - } -} +using LINGYUN.Abp.BlobManagement.Localization; +using Volo.Abp.Localization; +using Volo.Abp.Settings; + +namespace LINGYUN.Abp.BlobManagement.Settings; + +public class BlobManagementSettingDefinitionProvider : SettingDefinitionProvider +{ + public override void Define(ISettingDefinitionContext context) + { + context.Add(CreateBlobFileSettings()); + } + + protected SettingDefinition[] CreateBlobFileSettings() + { + return new SettingDefinition[] + { + new SettingDefinition( + name: BlobManagementSettingNames.FileLimitLength, + defaultValue: BlobManagementSettingNames.DefaultFileLimitLength.ToString(), + displayName: L("DisplayName:FileLimitLength"), + description: L("Description:FileLimitLength"), + isVisibleToClients: true) + .WithProviders( + DefaultValueSettingValueProvider.ProviderName, + ConfigurationSettingValueProvider.ProviderName, + GlobalSettingValueProvider.ProviderName, + TenantSettingValueProvider.ProviderName), + new SettingDefinition( + name: BlobManagementSettingNames.AllowFileExtensions, + defaultValue: BlobManagementSettingNames.DefaultAllowFileExtensions, + displayName: L("DisplayName:AllowFileExtensions"), + description: L("Description:AllowFileExtensions"), + isVisibleToClients: true) + .WithProviders( + DefaultValueSettingValueProvider.ProviderName, + ConfigurationSettingValueProvider.ProviderName, + GlobalSettingValueProvider.ProviderName, + TenantSettingValueProvider.ProviderName), + }; + } + + protected LocalizableString L(string name) + { + return LocalizableString.Create(name); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingNames.cs similarity index 56% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingNames.cs index 4c90cff41..cbd6a3fb1 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Settings/AbpOssManagementSettingNames.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain.Shared/LINGYUN/Abp/BlobManagement/Settings/BlobManagementSettingNames.cs @@ -1,21 +1,17 @@ -namespace LINGYUN.Abp.OssManagement.Settings; - -public class AbpOssManagementSettingNames -{ - public const string GroupName = "Abp.OssManagement"; - /// - /// 下载分包大小 - /// - public const string DownloadPackageSize = GroupName + ".DownloadPackageSize"; - /// - /// 文件限制长度 - /// - public const string FileLimitLength = GroupName + ".FileLimitLength"; - /// - /// 允许的文件扩展名类型 - /// - public const string AllowFileExtensions = GroupName + ".AllowFileExtensions"; - - public const long DefaultFileLimitLength = 100L; - public const string DefaultAllowFileExtensions = "dll,zip,rar,txt,log,xml,config,json,jpeg,jpg,png,bmp,ico,xlsx,xltx,xls,xlt,docs,dots,doc,dot,pptx,potx,ppt,pot,chm"; -} +namespace LINGYUN.Abp.BlobManagement.Settings; + +public static class BlobManagementSettingNames +{ + public const string GroupName = "Abp.BlobManagement"; + /// + /// 文件限制长度 + /// + public const string FileLimitLength = GroupName + ".FileLimitLength"; + /// + /// 允许的文件扩展名类型 + /// + public const string AllowFileExtensions = GroupName + ".AllowFileExtensions"; + + public const long DefaultFileLimitLength = 5L; + public const string DefaultAllowFileExtensions = "dll,zip,rar,txt,log,xml,config,json,jpeg,jpg,png,bmp,ico,xlsx,xltx,xls,xlt,docs,dots,doc,dot,pptx,potx,ppt,pot,chm"; +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN.Abp.BlobManagement.Domain.csproj similarity index 67% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN.Abp.BlobManagement.Domain.csproj index 498a0fd32..bbbf00c88 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN.Abp.OssManagement.Domain.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN.Abp.BlobManagement.Domain.csproj @@ -1,26 +1,28 @@ - + net10.0 - LINGYUN.Abp.OssManagement.Domain - LINGYUN.Abp.OssManagement.Domain + LINGYUN.Abp.BlobManagement.Domain + LINGYUN.Abp.BlobManagement.Domain false false false + enable + - + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainModule.cs new file mode 100644 index 000000000..86ed799f6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementDomainModule.cs @@ -0,0 +1,39 @@ +using LINGYUN.Abp.Features.LimitValidation; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.DependencyInjection.Extensions; +using Volo.Abp.Data; +using Volo.Abp.Domain; +using Volo.Abp.Domain.Entities.Events.Distributed; +using Volo.Abp.Modularity; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn( + typeof(AbpBlobManagementDomainSharedModule), + typeof(AbpDddDomainModule), + typeof(AbpMultiTenancyModule), + typeof(AbpFeaturesLimitValidationModule) + )] +public class AbpBlobManagementDomainModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddMapperlyObjectMapper(); + + Configure(options => + { + options.AutoEventSelectors.Add(); + options.AutoEventSelectors.Add(); + + options.EtoMappings.Add(typeof(AbpBlobManagementDomainModule)); + options.EtoMappings.Add(typeof(AbpBlobManagementDomainModule)); + }); + + if (context.Services.IsDataMigrationEnvironment()) + { + context.Services.Replace( + ServiceDescriptor.Singleton()); + } + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementOptions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementOptions.cs new file mode 100644 index 000000000..a19c8e5b3 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/AbpBlobManagementOptions.cs @@ -0,0 +1,32 @@ +using System; +using System.Collections.Generic; + +namespace LINGYUN.Abp.BlobManagement; + +public class AbpBlobManagementOptions +{ + public HashSet StaticContainers { get; } + public IDictionary BlobPolicyCheckProviders { get; } + public TimeSpan MinimumTempLifeSpan { get; set; } + public int MaximumTempSize { get; set; } + public int CleanupPeriod { get; set; } + public bool IsCleanupEnabled { get; set; } + public AbpBlobManagementOptions() + { + StaticContainers = new HashSet() + { + "public", + "users", + "system", + "workflow", + "icons", + "temp" + }; + BlobPolicyCheckProviders = new Dictionary(); + + MinimumTempLifeSpan = TimeSpan.FromHours(6); + MaximumTempSize = 1000; + CleanupPeriod = 720_0000;//2h + IsCleanupEnabled = true; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/Blob.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/Blob.cs new file mode 100644 index 000000000..51258d7be --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/Blob.cs @@ -0,0 +1,186 @@ +using JetBrains.Annotations; +using System; +using System.Collections.Generic; +using System.Collections.ObjectModel; +using System.Linq; +using Volo.Abp; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class Blob : AuditedAggregateRoot, IMultiTenant +{ + private const string MD5Key = "MD5"; + + public virtual Guid? TenantId { get; protected set; } + + public virtual Guid ContainerId { get; protected set; } + + public virtual Guid? ParentId { get; protected set; } + + public virtual string Name { get; protected set; } + + public virtual BlobType Type { get; protected set; } + + public virtual string? ContentType { get; protected set; } + + public virtual long Size { get; protected set; } + + public virtual DateTime? ExpirationTime { get; protected set; } + + public virtual string Provider { get; protected set; } + + public virtual string FullName { get; protected set; } + + public virtual long DownloadCount { get; protected set; } + + public virtual ICollection Blobs { get; protected set; } + protected Blob() + { + Blobs = new Collection(); + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + internal Blob( + Guid id, + Guid containerId, + [NotNull] string name, + BlobType type, + long? size = null, + Guid? parentId = null) : base(id) + { + ContainerId = containerId; + Name = Check.NotNullOrWhiteSpace(name, nameof(name), BlobConsts.MaxNameLength); + Type = type; + Size = size ?? 0L; + ParentId = parentId; + + Provider = default!; + DownloadCount = 0L; + FullName = CalculateBlobFullName("/", Name); + + Blobs = new Collection(); + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + public void SetFullName(string fullName) + { + FullName = Check.NotNullOrWhiteSpace(fullName, nameof(fullName), BlobConsts.MaxFullNameLength); + } + + public void SetProvider(string provider) + { + Provider = Check.NotNullOrWhiteSpace(provider, nameof(provider), BlobConsts.MaxProviderLength); + } + + public void SetFileInfo(string? contentType = null, long? size = null) + { + Size = size ?? 0L; + ContentType = Check.Length(contentType, nameof(contentType), BlobConsts.MaxContentTypeLength); + } + + public void SetExpire(DateTime? expirationTime = null) + { + ExpirationTime = expirationTime; + } + + public void SetDownloadCount(long downloadCount) + { + DownloadCount = downloadCount; + } + + public Blob AddBlob( + Guid id, + [NotNull] string name, + BlobType type, + long? size = null) + { + if (Type != BlobType.Folder) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.NonFolderChildBlob, + "Sub-files/directories cannot be added to non-directory types!"); + } + + if (HasBlob(name)) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.NameAlreadyExists, + $"There is already a file/directory named {name} in the current directory!") + .WithData("Name", name); + } + + var blob = new Blob( + id, + ContainerId, + name, + type, + size, + Id); + + blob.SetFullName(CalculateBlobFullName(FullName, name)); + + Blobs.Add(blob); + + CalculateSize(); + + return blob; + } + + public Blob? FindBlob(string name) + { + return Blobs.FirstOrDefault(x => x.Name == name); + } + + public void RemoveBlob(string name) + { + var blob = FindBlob(name); + if (blob == null) + { + return; + } + + Blobs.Remove(blob); + + Size -= blob.Size; + } + + public bool HasBlob(string name) + { + return Blobs.Any(x => x.Name == name); + } + + public void CalculateSize() + { + if (Type == BlobType.Folder) + { + Size = Blobs.Sum(x => x.Size); + } + } + + public void SetContentMd5(string md5) + { + this.SetProperty(MD5Key, md5); + } + + public bool CheckMd5(string md5) + { + var md5Prop = this.GetProperty(MD5Key, ""); + + return string.Equals(md5Prop, md5, StringComparison.InvariantCultureIgnoreCase); + } + + public static string CalculateBlobFullName(string blobPath, string blobName = "") + { + if (blobName.IsNullOrWhiteSpace()) + { + return blobPath; + } + + return blobPath.EnsureEndsWith('/') + blobName.RemovePreFix("/"); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobContainer.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobContainer.cs new file mode 100644 index 000000000..e050e1af6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobContainer.cs @@ -0,0 +1,40 @@ +using JetBrains.Annotations; +using System; +using Volo.Abp; +using Volo.Abp.Data; +using Volo.Abp.Domain.Entities.Auditing; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobContainer : AuditedAggregateRoot, IMultiTenant +{ + public virtual Guid? TenantId { get; protected set; } + public virtual string Name { get; protected set; } + public virtual string Provider { get; protected set; } + protected BlobContainer() + { + ExtraProperties = new ExtraPropertyDictionary(); + this.SetDefaultsForExtraProperties(); + } + + internal BlobContainer( + Guid id, + [NotNull] string name, + Guid? tenantId = null) + : base(id) + { + SetName(name); + TenantId = tenantId; + } + + public void SetName([NotNull] string name) + { + Name = Check.NotNullOrWhiteSpace(name, nameof(name), BlobContainerConsts.MaxNameLength); + } + + public void SetProvider(string provider) + { + Provider = Check.NotNullOrWhiteSpace(provider, nameof(provider), BlobContainerConsts.MaxProviderLength); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDataSeeder.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDataSeeder.cs new file mode 100644 index 000000000..e83516959 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDataSeeder.cs @@ -0,0 +1,53 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobDataSeeder : IBlobDataSeeder, ITransientDependency +{ + public ILogger Logger { protected get; set; } + + protected IBlobContainerRepository BlobContainerRepository { get; } + protected BlobManager BlobManager { get; } + protected ICurrentTenant CurrentTenant { get; } + protected IOptions BlobOptions { get; } + + public BlobDataSeeder( + IBlobContainerRepository blobContainerRepository, + BlobManager blobManager, + ICurrentTenant currentTenant, + IOptions blobOptions) + { + BlobContainerRepository = blobContainerRepository; + BlobManager = blobManager; + CurrentTenant = currentTenant; + BlobOptions = blobOptions; + + Logger = NullLogger.Instance; + } + + public async virtual Task SeedAsync(Guid? tenantId = null) + { + using (CurrentTenant.Change(tenantId)) + { + Logger.LogInformation("Seeding the static blob containers..."); + + foreach (var containerName in BlobOptions.Value.StaticContainers) + { + Logger.LogInformation("Seeding container {containerName}...", containerName); + + if (await BlobContainerRepository.FindByNameAsync(containerName) == null) + { + await BlobManager.CreateContainerAsync(containerName); + } + } + + Logger.LogInformation("Seeding the static blob containers completed."); + } + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadCacheItem.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadCacheItem.cs new file mode 100644 index 000000000..9dfbdb13b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadCacheItem.cs @@ -0,0 +1,21 @@ +namespace LINGYUN.Abp.BlobManagement; + +public class BlobDownloadCacheItem +{ + private const string CacheKeyFormat = "cn:{0};bn:{1}"; + public long DownloadCount { get; set; } + public BlobDownloadCacheItem() + { + + } + + public BlobDownloadCacheItem(long downloadCount) + { + DownloadCount = downloadCount; + } + + public static string CalculateCacheKey(string containerName, string blobName) + { + return string.Format(CacheKeyFormat, containerName, blobName); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadIncreaser.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadIncreaser.cs new file mode 100644 index 000000000..bcf2da457 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobDownloadIncreaser.cs @@ -0,0 +1,60 @@ +using System; +using System.Threading.Tasks; +using Volo.Abp.Caching; +using Volo.Abp.DependencyInjection; +using Volo.Abp.DistributedLocking; +using Volo.Abp.EventBus.Distributed; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobDownloadIncreaser : + IDistributedEventHandler, + ITransientDependency +{ + private readonly IDistributedCache _blobDownloadCache; + private readonly IAbpDistributedLock _distributedLock; + + private readonly IBlobContainerRepository _blobContainerRepository; + private readonly IBlobRepository _blobRepository; + + public BlobDownloadIncreaser( + IDistributedCache blobDownloadCache, + IAbpDistributedLock distributedLock, + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository) + { + _blobDownloadCache = blobDownloadCache; + _distributedLock = distributedLock; + _blobContainerRepository = blobContainerRepository; + _blobRepository = blobRepository; + } + + public async virtual Task HandleEventAsync(BlobDownloadEto eventData) + { + await using var handle = await _distributedLock.TryAcquireAsync($"{nameof(BlobDownloadIncreaser)}_{nameof(BlobDownloadEto)}"); + if (handle == null) + { + return; + } + + var blobContainer = await _blobContainerRepository.FindByNameAsync(eventData.ContainerName); + if (blobContainer == null) + { + return; + } + var blob = await _blobRepository.FindByFullNameAsync(eventData.FullName, blobContainer.Id); + if (blob != null) + { + var downloadCacheKey = BlobDownloadCacheItem.CalculateCacheKey(blobContainer.Name, eventData.FullName); + var downloadCacheItem = await _blobDownloadCache.GetAsync(downloadCacheKey); + if (downloadCacheItem == null) + { + downloadCacheItem = new BlobDownloadCacheItem(blob.DownloadCount); + await _blobDownloadCache.SetAsync(downloadCacheKey, downloadCacheItem); + } + blob.SetDownloadCount(downloadCacheItem.DownloadCount + 1); + + await _blobRepository.UpdateAsync(blob); + } + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementContainer.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementContainer.cs new file mode 100644 index 000000000..709427b8d --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementContainer.cs @@ -0,0 +1,8 @@ +using Volo.Abp.BlobStoring; + +namespace LINGYUN.Abp.BlobManagement; + +[BlobContainerName("blob-management")] +public class BlobManagementContainer +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDbProperties.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDbProperties.cs new file mode 100644 index 000000000..d37a587e8 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDbProperties.cs @@ -0,0 +1,12 @@ +using Volo.Abp.Data; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobManagementDbProperties +{ + public static string DbTablePrefix { get; set; } = AbpCommonDbProperties.DbTablePrefix; + + public static string? DbSchema { get; set; } = AbpCommonDbProperties.DbSchema; + + public const string ConnectionStringName = "AbpBlobManagement"; +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDomainMappers.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDomainMappers.cs new file mode 100644 index 000000000..97a9b0fce --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManagementDomainMappers.cs @@ -0,0 +1,21 @@ +using Riok.Mapperly.Abstractions; +using Volo.Abp.Mapperly; +using Volo.Abp.ObjectExtending; + +namespace LINGYUN.Abp.BlobManagement; + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties(DefinitionChecks = MappingPropertyDefinitionChecks.None)] +public partial class BlobContainerToBlobContainerEtoMapper : MapperBase +{ + public override partial BlobContainerEto Map(BlobContainer source); + public override partial void Map(BlobContainer source, BlobContainerEto destination); +} + +[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] +[MapExtraProperties(DefinitionChecks = MappingPropertyDefinitionChecks.None)] +public partial class BlobToBlobEtoMapper : MapperBase +{ + public override partial BlobEto Map(Blob source); + public override partial void Map(Blob source, BlobEto destination); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManager.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManager.cs new file mode 100644 index 000000000..f52b5ee62 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobManager.cs @@ -0,0 +1,397 @@ +using LINGYUN.Abp.BlobManagement.Settings; +using Microsoft.Extensions.Caching.Memory; +using System; +using System.IO; +using System.Linq; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Caching; +using Volo.Abp.Content; +using Volo.Abp.Domain.Services; +using Volo.Abp.EventBus.Distributed; +using Volo.Abp.IO; +using Volo.Abp.Settings; +using Volo.Abp.Specifications; +using Volo.Abp.Threading; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobManager : DomainService +{ + private readonly IDistributedCache _blobDownloadCache; + private readonly IDistributedEventBus _distributedEventBus; + private readonly IMemoryCache _blobFileValidateCache; + private readonly ISettingProvider _settingProvider; + + private readonly IBlobProvider _blobProvider; + private readonly IBlobRepository _blobRepository; + private readonly IBlobContainerRepository _blobContainerRepository; + + private readonly IApplicationInfoAccessor _applicationInfoAccessor; + private readonly ICancellationTokenProvider _cancellationTokenProvider; + public BlobManager( + IBlobProvider blobProvider, + IBlobRepository blobRepository, + IBlobContainerRepository blobContainerRepository, + ICancellationTokenProvider cancellationTokenProvider, + IDistributedEventBus distributedEventBus, + IDistributedCache blobDownloadCache, + IApplicationInfoAccessor applicationInfoAccessor, + IMemoryCache blobFileValidateCache, + ISettingProvider settingProvider) + { + _blobProvider = blobProvider; + _blobRepository = blobRepository; + _blobContainerRepository = blobContainerRepository; + _cancellationTokenProvider = cancellationTokenProvider; + _distributedEventBus = distributedEventBus; + _blobDownloadCache = blobDownloadCache; + _applicationInfoAccessor = applicationInfoAccessor; + _blobFileValidateCache = blobFileValidateCache; + _settingProvider = settingProvider; + } + + public async virtual Task CreateContainerAsync(string name) + { + Check.NotNullOrWhiteSpace(name, nameof(name)); + + if (await _blobContainerRepository.FindByNameAsync(name) != null) + { + throw new BusinessException( + BlobManagementErrorCodes.Container.NameAlreadyExists, + $"A blob container named {name} already exists!") + .WithData("Name", name); + } + + var blobContainer = new BlobContainer( + GuidGenerator.Create(), + name, + CurrentTenant.Id); + + await _blobProvider.CreateContainerAsync(blobContainer.Name, GetCancellationToken()); + + blobContainer.SetProvider(_blobProvider.Name); + + await _blobContainerRepository.InsertAsync(blobContainer); + + return blobContainer; + } + + public async virtual Task DeleteContainerAsync(BlobContainer blobContainer) + { + var getBlobsExistsSpec = new ExpressionSpecification( + x => x.ContainerId == blobContainer.Id); + + var existsBlobsCount = await _blobRepository.GetCountAsync(getBlobsExistsSpec); + if (existsBlobsCount > 0) + { + throw new BusinessException( + BlobManagementErrorCodes.Container.DeleteWithNotEmpty, + "The blob container is not empty and cannot be deleted!"); + } + + await _blobProvider.DeleteContainerAsync(blobContainer.Name, GetCancellationToken()); + + await _blobContainerRepository.DeleteAsync(blobContainer); + } + + public async virtual Task CreateBlobAsync( + BlobContainer blobContainer, + string name, + BlobType type, + long? size = null, + Blob? parentBlob = null, + bool overrideExisting = false) + { + Check.NotNullOrWhiteSpace(name, nameof(name)); + + var existsBlob = await _blobRepository.FindByNameAsync(blobContainer.Id, name, parentBlob?.Id); + if (existsBlob != null) + { + if (!overrideExisting) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.NameAlreadyExists, + $"There is already a file/directory named {name} in the current directory!") + .WithData("Name", name); + } + + await DeleteBlobAsync(existsBlob); + } + Blob blob; + if (parentBlob != null) + { + blob = parentBlob.AddBlob( + GuidGenerator.Create(), + name, + type); + + await _blobRepository.UpdateAsync(parentBlob); + } + else + { + blob = new Blob( + GuidGenerator.Create(), + blobContainer.Id, + name, + type, + size); + } + + if (type == BlobType.Folder) + { + await _blobProvider.CreateFolderAsync(blobContainer.Name, blob.FullName, GetCancellationToken()); + + blob.SetProvider(_blobProvider.Name); + } + + await _blobRepository.InsertAsync(blob); + + return blob; + } + + public async virtual Task DeleteBlobAsync(Blob blob) + { + if (blob.Blobs.Count > 0) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.DeleteWithNotEmpty, + "The current directory is not empty and cannot be deleted!"); + } + + var blobContainer = await _blobContainerRepository.GetAsync(blob.ContainerId); + + if (blob.ParentId.HasValue) + { + var parentBlob = await _blobRepository.GetAsync(blob.ParentId.Value); + + parentBlob.RemoveBlob(blob.Name); + + await _blobRepository.UpdateAsync(parentBlob); + } + + await _blobRepository.DeleteAsync(blob); + + if (blob.Type == BlobType.Folder) + { + await _blobProvider.DeleteFolderAsync(blobContainer.Name, blob.FullName, GetCancellationToken()); + } + else + { + await _blobProvider.DeleteBlobAsync(blobContainer.Name, blob.FullName, GetCancellationToken()); + } + } + + public async virtual Task UploadBlobAsync( + BlobContainer blobContainer, + Blob blob, + Stream stream, + string? contentType = null, + string? compareMd5 = null) + { + await ValidateUploadFileAsync(blob.Name, stream.Length); + + if (!compareMd5.IsNullOrWhiteSpace()) + { + var blobMd5 = stream.MD5(); + if (!string.Equals(blobMd5, compareMd5, StringComparison.InvariantCultureIgnoreCase)) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.BlobHashValidFailed, + "File fingerprint verification failed. Please check the file's legitimacy!"); + } + blob.SetContentMd5(blobMd5); + } + + await _blobProvider.UploadBlobAsync(blobContainer.Name, blob.FullName, stream, GetCancellationToken()); + + blob.SetProvider(_blobProvider.Name); + blob.SetFileInfo(contentType, stream.Length); + + return blob; + } + + public async virtual Task CreateChunkBlobAsync( + string containerIdOrName, + string name, + IRemoteStreamContent file, + long chunkSize, + long currentChunkSize, + long chunkNumber, + long totalChunks, + string? compareMd5 = null, + Guid? parentId = null) + { + await ValidateUploadFileAsync(name, totalChunks * chunkSize); + + var tempFilePath = GetChunkBlobTempPath(containerIdOrName, name, parentId); + + try + { + // 创建分片文件缓存目录 + DirectoryHelper.CreateIfNotExists(tempFilePath); + + var cancellationToken = GetCancellationToken(); + + // 创建分片文件 + var tempSavedFile = Path.Combine(tempFilePath, $"{chunkNumber}.chunk"); + // 分片传输中断重续时删除原文件 + FileHelper.DeleteIfExists(tempSavedFile); + // 当前分片文件缓存 + using (var fs = File.OpenWrite(tempSavedFile)) + { + await file.GetStream().CopyToAsync(fs, cancellationToken); + } + // 最后一个分片时合并文件 + if (chunkNumber == totalChunks) + { + var mergeTmpFile = Path.Combine(tempFilePath, name); + FileHelper.DeleteIfExists(mergeTmpFile); + // 创建临时合并文件流 + using (var mergeFileStream = new FileStream(mergeTmpFile, FileMode.Create, FileAccess.ReadWrite)) + { + // 获取并排序所有分片文件 + var mergeFiles = Directory.GetFiles(tempFilePath, "*.chunk").OrderBy(name => name); + // 创建临时合并文件 + foreach (var mergeFile in mergeFiles) + { + // 写入到合并文件流 + await mergeFileStream.WriteAsync(await FileHelper.ReadAllBytesAsync(mergeFile), cancellationToken); + // 删除已参与合并的临时文件分片 + FileHelper.DeleteIfExists(mergeFile); + } + // 创建Blob对象 + BlobContainer blobContainer; + Blob? parentBlob = null; + if (Guid.TryParse(containerIdOrName, out var containerId)) + { + blobContainer = await _blobContainerRepository.GetAsync(containerId); + } + else + { + blobContainer = await _blobContainerRepository.GetByNameAsync(containerIdOrName); + } + if (parentId.HasValue) + { + parentBlob = await _blobRepository.GetAsync(parentId.Value); + } + var blob = await CreateBlobAsync( + blobContainer, + name, + BlobType.File, + mergeFileStream.Length, + parentBlob); + + // 多分片文件流合并上传 + mergeFileStream.Seek(0, SeekOrigin.Begin); + await UploadBlobAsync(blobContainer, blob, mergeFileStream, compareMd5); + } + // 文件保存之后删除临时文件目录 + DirectoryHelper.DeleteIfExists(tempFilePath, true); + } + } + catch + { + // 发生异常删除临时文件目录 + DirectoryHelper.DeleteIfExists(tempFilePath, true); + throw; + } + } + + public async virtual Task DownloadBlobsync(Blob blob) + { + var containerName = await _blobContainerRepository.GetNameAsync(blob.ContainerId); + + return await DownloadBlobsync(containerName, blob.FullName); + } + + public virtual string GetBlobProvider() + { + return _blobProvider.Name; + } + + protected async virtual Task DownloadBlobsync(string containerName, string blobName) + { + var blobStream = await _blobProvider.DownloadBlobAsync(containerName, blobName, GetCancellationToken()); + if (blobStream != null) + { + var downloadCacheKey = BlobDownloadCacheItem.CalculateCacheKey(containerName, blobName); + var downloadCacheItem = await _blobDownloadCache.GetAsync(downloadCacheKey) + ?? new BlobDownloadCacheItem(0); + downloadCacheItem.DownloadCount += 1; + await _blobDownloadCache.SetAsync(downloadCacheKey, downloadCacheItem); + + await _distributedEventBus.PublishAsync(new BlobDownloadEto(containerName, blobName, CurrentTenant.Id)); + } + + return blobStream; + } + + protected async virtual Task ValidateUploadFileAsync(string blobName, long blobSize) + { + var fileValidateCacheItem = await GetFileValidateCacheItemAsync(); + if (fileValidateCacheItem.SizeLimit * 1024 * 1024 < blobSize) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.UploadFileSizeTooLong, + $"Upload file size cannot exceed {fileValidateCacheItem.SizeLimit} MB!") + .WithData("Limit", fileValidateCacheItem.SizeLimit); + } + var fileExtensionName = FileHelper.GetExtension(blobName); + if (fileExtensionName.IsNullOrWhiteSpace() || + !fileValidateCacheItem.AllowedExtensions + .Any(fe => fileExtensionName.EndsWith(fe, StringComparison.CurrentCultureIgnoreCase))) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.UploadFileExtendCanNotBeMatch, + $"Not allowed file extension: {fileExtensionName}!") + .WithData("Name", fileExtensionName ?? "Unknown"); + } + } + + protected async virtual Task GetFileValidateCacheItemAsync() + { + var fileValidateCacheItem = _blobFileValidateCache.Get(BlobUploadFileValidateCacheItem.CacheKey); + if (fileValidateCacheItem == null) + { + var fileSizeLimited = await _settingProvider + .GetAsync( + BlobManagementSettingNames.FileLimitLength, + BlobManagementSettingNames.DefaultFileLimitLength); + var fileAllowExtensions = await _settingProvider + .GetOrNullAsync(BlobManagementSettingNames.AllowFileExtensions) ?? BlobManagementSettingNames.DefaultAllowFileExtensions; + + fileValidateCacheItem = new BlobUploadFileValidateCacheItem(fileSizeLimited, fileAllowExtensions.Split(',')); + + _blobFileValidateCache.Set(BlobUploadFileValidateCacheItem.CacheKey, + fileValidateCacheItem, + new MemoryCacheEntryOptions + { + AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2) + }); + } + return fileValidateCacheItem; + } + + protected virtual string GetChunkBlobTempPath( + string containerName, + string blobName, + Guid? blobParentId = null) + { + return Path.Combine( + Path.GetTempPath(), + _applicationInfoAccessor.ApplicationName ?? "BlobManagement", + "chunk_blob_temp", + string.Concat( + CurrentTenant.Id?.ToString() ?? "", + containerName, + blobParentId?.ToString() ?? "", + blobName).ToMd5()); + } + + protected virtual CancellationToken GetCancellationToken(CancellationToken cancellationToken = default) + { + return _cancellationTokenProvider.FallbackToProvider(cancellationToken); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobPolicyCheckContext.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobPolicyCheckContext.cs new file mode 100644 index 000000000..6fb1e8425 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobPolicyCheckContext.cs @@ -0,0 +1,19 @@ +using System; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobPolicyCheckContext +{ + public IServiceProvider ServiceProvider { get; } + public string PolicyName { get; } + public Blob Blob { get; } + public BlobPolicyCheckContext( + IServiceProvider serviceProvider, + string policyName, + Blob blob) + { + ServiceProvider = serviceProvider; + PolicyName = policyName; + Blob = blob; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobTempCleanupService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobTempCleanupService.cs new file mode 100644 index 000000000..c34de069f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobTempCleanupService.cs @@ -0,0 +1,94 @@ +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; +using Microsoft.Extensions.Options; +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Specifications; +using Volo.Abp.Timing; + +namespace LINGYUN.Abp.BlobManagement; + +public class BlobTempCleanupService : ITransientDependency +{ + public ILogger Logger { get; set; } + protected AbpBlobManagementOptions Options { get; } + protected IClock Clock { get; set; } + protected ICurrentTenant CurrentTenant { get; } + protected IBlobRepository BlobRepository { get; } + protected IBlobContainerRepository BlobContainerRepository { get; } + protected BlobManager BlobManager { get; } + + public BlobTempCleanupService( + IClock clock, + ICurrentTenant currentTenant, + IOptions options, + IBlobContainerRepository blobContainerRepository, + IBlobRepository blobRepository, + BlobManager blobManager) + { + Clock = clock; + CurrentTenant = currentTenant; + Options = options.Value; + BlobContainerRepository = blobContainerRepository; + BlobRepository = blobRepository; + BlobManager = blobManager; + + Logger = NullLogger.Instance; + } + + public virtual async Task CleanAsync() + { + Logger.LogInformation("Start blob cleanup service."); + + if (Options.IsCleanupEnabled) + { + var host = CurrentTenant.IsAvailable ? CurrentTenant.Name ?? CurrentTenant.Id.ToString() : "host"; + + Logger.LogInformation("Start cleanup {host} temp blobs.", host); + + try + { + var tempBlobContainer = await BlobContainerRepository.FindByNameAsync("temp"); + if (tempBlobContainer == null) + { + Logger.LogInformation($"No temp container found."); + return; + } + + var threshold = Clock.Now - Options.MinimumTempLifeSpan; + + var expiredTempFiles = await BlobRepository.GetListAsync( + new ExpressionSpecification( + x => x.ContainerId == tempBlobContainer.Id && + x.Type == BlobType.File && + x.CreationTime <= threshold), + sorting: $"{nameof(Blob.CreationTime)} DESC", + maxResultCount: Options.MaximumTempSize); + + foreach ( var file in expiredTempFiles) + { + await BlobManager.DeleteBlobAsync(file); + } + + var expiredTempFolders = await BlobRepository.GetListAsync( + new ExpressionSpecification( + x => x.ContainerId == tempBlobContainer.Id && + x.Type == BlobType.Folder && + x.CreationTime <= threshold), + sorting: $"{nameof(Blob.CreationTime)} DESC", + maxResultCount: Options.MaximumTempSize); + + foreach (var folder in expiredTempFolders) + { + await BlobManager.DeleteBlobAsync(folder); + } + } + catch (Exception ex) + { + Logger.LogWarning("Failed to clear expired blobs: {message}", ex.Message); + } + } + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobUploadFileValidateCacheItem.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobUploadFileValidateCacheItem.cs new file mode 100644 index 000000000..1897819b3 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/BlobUploadFileValidateCacheItem.cs @@ -0,0 +1,20 @@ +namespace LINGYUN.Abp.BlobManagement; + +public class BlobUploadFileValidateCacheItem +{ + public const string CacheKey = "Abp.BlobManagement.FileValidation"; + public long SizeLimit { get; set; } + public string[] AllowedExtensions { get; set; } + public BlobUploadFileValidateCacheItem() + { + + } + + public BlobUploadFileValidateCacheItem( + long sizeLimit, + string[] allowedExtensions) + { + SizeLimit = sizeLimit; + AllowedExtensions = allowedExtensions; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepository.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepository.cs new file mode 100644 index 000000000..f80d6d228 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepository.cs @@ -0,0 +1,30 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobContainerRepository : IBasicRepository +{ + Task GetNameAsync( + Guid id, + CancellationToken cancellationToken = default); + + Task FindByNameAsync( + string name, + CancellationToken cancellationToken = default); + + Task GetCountAsync( + ISpecification specification, + CancellationToken cancellationToken = default); + + Task> GetListAsync( + ISpecification specification, + string? sorting = nameof(BlobContainer.Name), + int maxResultCount = 10, + int skipCount = 0, + CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepositoryExtenssions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepositoryExtenssions.cs new file mode 100644 index 000000000..b5795e01f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobContainerRepositoryExtenssions.cs @@ -0,0 +1,20 @@ +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; + +namespace LINGYUN.Abp.BlobManagement; + +public static class IBlobContainerRepositoryExtenssions +{ + public async static Task GetByNameAsync( + this IBlobContainerRepository repository, + string name, + CancellationToken cancellationToken = default) + { + return await repository.FindByNameAsync(name, cancellationToken) + ?? throw new BusinessException( + BlobManagementErrorCodes.Container.NameNotFound, + $"There is no blob container named {name}!") + .WithData("Name", name); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobDataSeeder.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobDataSeeder.cs new file mode 100644 index 000000000..15cf9b61b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobDataSeeder.cs @@ -0,0 +1,9 @@ +using System; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobDataSeeder +{ + Task SeedAsync(Guid? tenantId = null); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobPolicyCheckProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobPolicyCheckProvider.cs new file mode 100644 index 000000000..9694d113f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobPolicyCheckProvider.cs @@ -0,0 +1,10 @@ +using System.Threading.Tasks; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobPolicyCheckProvider +{ + string Name { get; } + + Task CheckAsync(BlobPolicyCheckContext context); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobProvider.cs new file mode 100644 index 000000000..72a7a708f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobProvider.cs @@ -0,0 +1,44 @@ +using System.IO; +using System.Threading; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobProvider +{ + string Name { get; } + + Task CreateContainerAsync( + string name, + CancellationToken cancellationToken = default); + + Task DeleteContainerAsync( + string name, + CancellationToken cancellationToken = default); + + Task DownloadBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default); + + Task CreateFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default); + + Task DeleteFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default); + + Task UploadBlobAsync( + string containerName, + string blobName, + Stream stream, + CancellationToken cancellationToken = default); + + Task DeleteBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobRepository.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobRepository.cs new file mode 100644 index 000000000..1577bb3f2 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/IBlobRepository.cs @@ -0,0 +1,43 @@ +using System; +using System.Collections.Generic; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobRepository : IBasicRepository +{ + Task ExistsAsync( + string containerName, + string fullName, + CancellationToken cancellationToken = default); + + Task FindByNameAsync( + Guid containerId, + string name, + Guid? parentId = null, + CancellationToken cancellationToken = default); + + Task FindByFullNameAsync( + string fullName, + Guid? containerId = null, + CancellationToken cancellationToken = default); + + Task> GetFolderListAsync( + IEnumerable paths, + Guid? containerId = null, + CancellationToken cancellationToken = default); + + Task GetCountAsync( + ISpecification specification, + CancellationToken cancellationToken = default); + + Task> GetListAsync( + ISpecification specification, + string? sorting = nameof(Blob.Name), + int maxResultCount = 10, + int skipCount = 0, + CancellationToken cancellationToken = default); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/NoneBlobDataSeeder.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/NoneBlobDataSeeder.cs new file mode 100644 index 000000000..c3514afd0 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/LINGYUN/Abp/BlobManagement/NoneBlobDataSeeder.cs @@ -0,0 +1,12 @@ +using System; +using System.Threading.Tasks; + +namespace LINGYUN.Abp.BlobManagement; + +public class NoneBlobDataSeeder : IBlobDataSeeder +{ + public Task SeedAsync(Guid? tenantId = null) + { + return Task.CompletedTask; + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/IO/FileSystemExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/System/IO/SystemExtensions.cs similarity index 80% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/IO/FileSystemExtensions.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/System/IO/SystemExtensions.cs index ae3735e44..136068bb8 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/IO/FileSystemExtensions.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Domain/System/IO/SystemExtensions.cs @@ -1,23 +1,23 @@ -using System.Text; - -namespace System.IO; - -internal static class FileSystemExtensions -{ - public static string MD5(this FileStream stream) - { - if (stream.CanSeek) - { - stream.Seek(0, SeekOrigin.Begin); - } - using var md5 = Security.Cryptography.MD5.Create(); - var retVal = md5.ComputeHash(stream); - var sb = new StringBuilder(); - for (var i = 0; i < retVal.Length; i++) - { - sb.Append(retVal[i].ToString("x2")); - } - stream.Seek(0, SeekOrigin.Begin); - return sb.ToString(); - } -} +using System.Text; + +namespace System.IO; + +internal static class SystemExtensions +{ + public static string MD5(this Stream stream) + { + if (stream.CanSeek) + { + stream.Seek(0, SeekOrigin.Begin); + } + using var md5 = Security.Cryptography.MD5.Create(); + var retVal = md5.ComputeHash(stream); + var sb = new StringBuilder(); + for (var i = 0; i < retVal.Length; i++) + { + sb.Append(retVal[i].ToString("x2")); + } + stream.Seek(0, SeekOrigin.Begin); + return sb.ToString(); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN.Abp.BlobManagement.EntityFrameworkCore.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN.Abp.BlobManagement.EntityFrameworkCore.csproj new file mode 100644 index 000000000..348072d9f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN.Abp.BlobManagement.EntityFrameworkCore.csproj @@ -0,0 +1,25 @@ + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.EntityFrameworkCore + LINGYUN.Abp.BlobManagement.EntityFrameworkCore + false + false + false + enable + + + + + + + + + + + + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/AbpBlobManagementEntityFrameworkCoreModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/AbpBlobManagementEntityFrameworkCoreModule.cs new file mode 100644 index 000000000..c9df37260 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/AbpBlobManagementEntityFrameworkCoreModule.cs @@ -0,0 +1,30 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.DependencyInjection; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +[DependsOn( + typeof(AbpBlobManagementDomainModule), + typeof(AbpEntityFrameworkCoreModule))] +public class AbpBlobManagementEntityFrameworkCoreModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddAbpDbContext(options => + { + options.AddRepository(); + options.AddRepository(); + }); + + Configure(options => + { + options.Entity(orderOptions => + { + orderOptions.DefaultWithDetailsFunc = query => query.Include(o => o.Blobs); + }); + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContext.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContext.cs new file mode 100644 index 000000000..2d9ad3ddf --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContext.cs @@ -0,0 +1,26 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +[ConnectionStringName(BlobManagementDbProperties.ConnectionStringName)] +public class BlobManagementDbContext : AbpDbContext, IBlobManagementDbContext +{ + public DbSet BlobContainers { get; set; } + + public DbSet Blobs { get; set; } + + public BlobManagementDbContext( + DbContextOptions options) + : base(options) + { + } + + protected override void OnModelCreating(ModelBuilder builder) + { + base.OnModelCreating(builder); + + builder.ConfigureBlobManagement(); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContextModelCreatingExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContextModelCreatingExtensions.cs new file mode 100644 index 000000000..b51385e34 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/BlobManagementDbContextModelCreatingExtensions.cs @@ -0,0 +1,52 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp; +using Volo.Abp.EntityFrameworkCore.Modeling; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +public static class BlobManagementDbContextModelCreatingExtensions +{ + public static void ConfigureBlobManagement( + this ModelBuilder builder) + { + Check.NotNull(builder, nameof(builder)); + + builder.Entity(b => + { + b.ToTable(BlobManagementDbProperties.DbTablePrefix + "BlobContainers", BlobManagementDbProperties.DbSchema); + + b.ConfigureByConvention(); + + b.Property(p => p.Name).IsRequired().HasMaxLength(BlobContainerConsts.MaxNameLength); + b.Property(p => p.Provider).HasMaxLength(BlobContainerConsts.MaxProviderLength); + + b.HasMany().WithOne().HasForeignKey(p => p.ContainerId); + + b.HasIndex(x => new { x.TenantId, x.Name }); + + b.ApplyObjectExtensionMappings(); + }); + + builder.Entity(b => + { + b.ToTable(BlobManagementDbProperties.DbTablePrefix + "Blobs", BlobManagementDbProperties.DbSchema); + + b.ConfigureByConvention(); + + b.Property(p => p.ContainerId).IsRequired(); + b.Property(p => p.Name).IsRequired().HasMaxLength(BlobConsts.MaxNameLength); + b.Property(p => p.FullName).IsRequired().HasMaxLength(BlobConsts.MaxFullNameLength); + b.Property(p => p.ContentType).HasMaxLength(BlobConsts.MaxContentTypeLength); + b.Property(p => p.Provider).HasMaxLength(BlobConsts.MaxProviderLength); + + b.HasOne().WithMany().HasForeignKey(p => p.ContainerId); + b.HasMany(x => x.Blobs).WithOne().HasForeignKey(p => p.ParentId); + + b.HasIndex(x => new { x.TenantId, x.ContainerId, x.FullName }); + + b.ApplyObjectExtensionMappings(); + }); + + builder.TryConfigureObjectExtensions(); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobContainerRepository.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobContainerRepository.cs new file mode 100644 index 000000000..145b304fe --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobContainerRepository.cs @@ -0,0 +1,63 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +public class EfCoreBlobContainerRepository : EfCoreRepository, IBlobContainerRepository +{ + public EfCoreBlobContainerRepository( + IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public async virtual Task GetNameAsync( + Guid id, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(x => x.Id == id) + .Select(x => x.Name) + .FirstAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task FindByNameAsync( + string name, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(x => x.Name == name) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task GetCountAsync( + ISpecification specification, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(specification.ToExpression()) + .CountAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetListAsync( + ISpecification specification, + string? sorting = nameof(BlobContainer.Name), + int maxResultCount = 10, + int skipCount = 0, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(specification.ToExpression()) + .OrderBy(!sorting.IsNullOrWhiteSpace() ? sorting : nameof(BlobContainer.Name)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobRepository.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobRepository.cs new file mode 100644 index 000000000..1456a02e4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/EfCoreBlobRepository.cs @@ -0,0 +1,93 @@ +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.Domain.Repositories.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Specifications; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +public class EfCoreBlobRepository : EfCoreRepository, IBlobRepository +{ + public EfCoreBlobRepository( + IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public async virtual Task ExistsAsync( + string containerName, + string fullName, + CancellationToken cancellationToken = default) + { + var dbContext = await GetDbContextAsync(); + + return await (from container in dbContext.Set() + join blob in dbContext.Set() + on container.Id equals blob.ContainerId + where container.Name == containerName && blob.FullName == fullName + select blob) + .AnyAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task FindByNameAsync( + Guid containerId, + string name, + Guid? parentId = null, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(x => x.ContainerId == containerId && x.Name == name && x.ParentId == parentId) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task FindByFullNameAsync( + string fullName, + Guid? containerId = null, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(x => x.FullName == fullName) + .WhereIf(containerId.HasValue, x => x.ContainerId == containerId) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetFolderListAsync( + IEnumerable paths, + Guid? containerId = null, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(x => x.Type == BlobType.Folder && paths.Contains(x.FullName)) + .WhereIf(containerId.HasValue, x => x.ContainerId == containerId) + .OrderByDescending(x => x.FullName.Length) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task GetCountAsync( + ISpecification specification, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(specification.ToExpression()) + .CountAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetListAsync( + ISpecification specification, + string? sorting = nameof(Blob.Name), + int maxResultCount = 10, + int skipCount = 0, + CancellationToken cancellationToken = default) + { + return await (await GetQueryableAsync()) + .Where(specification.ToExpression()) + .OrderBy(!sorting.IsNullOrWhiteSpace() ? sorting : nameof(Blob.Name)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/IBlobManagementDbContext.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/IBlobManagementDbContext.cs new file mode 100644 index 000000000..aa2b6df42 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.EntityFrameworkCore/LINGYUN/Abp/BlobManagement/EntityFrameworkCore/IBlobManagementDbContext.cs @@ -0,0 +1,12 @@ +using Microsoft.EntityFrameworkCore; +using Volo.Abp.Data; +using Volo.Abp.EntityFrameworkCore; + +namespace LINGYUN.Abp.BlobManagement.EntityFrameworkCore; + +[ConnectionStringName(BlobManagementDbProperties.ConnectionStringName)] +public interface IBlobManagementDbContext : IEfCoreDbContext +{ + DbSet BlobContainers { get; } + DbSet Blobs { get; } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN.Abp.OssManagement.FileSystem.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN.Abp.BlobManagement.FileSystem.csproj similarity index 63% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN.Abp.OssManagement.FileSystem.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN.Abp.BlobManagement.FileSystem.csproj index 3d752aa77..9156411c4 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN.Abp.OssManagement.FileSystem.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN.Abp.BlobManagement.FileSystem.csproj @@ -1,25 +1,25 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.FileSystem - LINGYUN.Abp.OssManagement.FileSystem - false - false - false - latest - - - - - - - - - - - - + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.FileSystem + LINGYUN.Abp.BlobManagement.FileSystem + false + false + false + enable + + + + + + + + + + + + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/AbpBlobManagementFileSystemModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/AbpBlobManagementFileSystemModule.cs new file mode 100644 index 000000000..a464d9045 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/AbpBlobManagementFileSystemModule.cs @@ -0,0 +1,43 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.IO; +using Volo.Abp.BlobStoring; +using Volo.Abp.BlobStoring.FileSystem; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement.FileSystem; + +[DependsOn( + typeof(AbpBlobManagementDomainModule), + typeof(AbpBlobStoringFileSystemModule))] +public class AbpBlobManagementFileSystemModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var ossConfiguration = configuration.GetSection("BlobManagement"); + var ossProvider = ossConfiguration["Provider"]; + + if (!ossProvider.IsNullOrWhiteSpace() && + string.Equals(FileSystemBlobProvider.ProviderName, ossProvider, StringComparison.InvariantCultureIgnoreCase)) + { + Configure(options => + { + options.Containers.Configure((containerConfiguration) => + { + containerConfiguration.UseFileSystem(oss => + { + var blobConfiguration = ossConfiguration.GetSection(FileSystemBlobProvider.ProviderName); + + oss.BasePath = Path.Combine( + Directory.GetCurrentDirectory(), + blobConfiguration["BasePath"] ?? "blobs"); + oss.AppendContainerNameToBasePath = blobConfiguration.GetValue("AppendContainerNameToBasePath", true); + }); + }); + }); + context.Services.AddTransient(); + } + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/FileSystemBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/FileSystemBlobProvider.cs new file mode 100644 index 000000000..173590bbf --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.FileSystem/LINGYUN/Abp/BlobManagement/FileSystem/FileSystemBlobProvider.cs @@ -0,0 +1,174 @@ +using Microsoft.Extensions.Configuration; +using System; +using System.IO; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.BlobStoring; +using Volo.Abp.BlobStoring.FileSystem; +using Volo.Abp.IO; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement.FileSystem; + +public class FileSystemBlobProvider : IBlobProvider +{ + public const string ProviderName = "FileSystem"; + public string Name => ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + protected FileSystemBlobNamingNormalizer BlobNamingNormalizer { get; } + protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } + + public FileSystemBlobProvider( + ICurrentTenant currentTenant, + FileSystemBlobNamingNormalizer blobNamingNormalizer, + IBlobContainerConfigurationProvider configurationProvider) + { + CurrentTenant = currentTenant; + BlobNamingNormalizer = blobNamingNormalizer; + ConfigurationProvider = configurationProvider; + } + + public virtual Task CreateContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var filePath = CalculateBlobName(NormalizeContainerName(name)); + + DirectoryHelper.CreateIfNotExists(filePath); + + return Task.CompletedTask; + } + + public virtual Task DeleteContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var filePath = CalculateBlobName(NormalizeContainerName(name)); + + DirectoryHelper.DeleteIfExists(filePath); + + return Task.CompletedTask; + } + + public virtual Task DeleteBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var fileName = CalculateBlobName(NormalizeContainerName(containerName.RemovePostFix("/")), blobName); + + FileHelper.DeleteIfExists(fileName); + + return Task.CompletedTask; + } + + public virtual Task DeleteFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var filePath = CalculateBlobName(NormalizeContainerName(containerName.RemovePostFix("/")), blobName); + + var children = Directory.GetFileSystemEntries(filePath); + if (children.Length > 0) + { + throw new BusinessException( + BlobManagementErrorCodes.Blob.DeleteWithNotEmpty, + "The current directory is not empty and cannot be deleted!"); + } + + DirectoryHelper.DeleteIfExists(filePath); + + return Task.CompletedTask; + } + + public virtual Task DownloadBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var fileName = CalculateBlobName(NormalizeContainerName(containerName.RemovePostFix("/")), blobName); + + if (!File.Exists(fileName)) + { + return Task.FromResult(null); + } + + return Task.FromResult(File.OpenRead(fileName)); + } + + public virtual Task CreateFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var filePath = CalculateBlobName(NormalizeContainerName(containerName.RemovePostFix("/")), blobName); + + DirectoryHelper.CreateIfNotExists(filePath); + + return Task.CompletedTask; + } + + public async virtual Task UploadBlobAsync( + string containerName, + string blobName, + Stream content, + CancellationToken cancellationToken = default) + { + var fileName = CalculateBlobName(NormalizeContainerName(containerName.RemovePostFix("/")), blobName); + + DirectoryHelper.CreateIfNotExists(Path.GetDirectoryName(fileName)!); + + using var fileStream = File.Open(fileName, FileMode.Create, FileAccess.ReadWrite); + + await content.CopyToAsync(fileStream, cancellationToken); + + await fileStream.FlushAsync(cancellationToken); + } + + protected virtual FileSystemBlobProviderConfiguration GetBlobConfiguration() + { + var configuration = ConfigurationProvider.Get(); + var blobConfiguration = configuration.GetFileSystemConfiguration(); + return blobConfiguration; + } + + protected virtual string NormalizeContainerName(string containerName) + { + if (!containerName.StartsWith("abp-")) + { + containerName = "abp-" + containerName; + } + return BlobNamingNormalizer.NormalizeContainerName(containerName); + } + + protected virtual string CalculateBlobName(string bucketName, string blobName = "") + { + var blobConfiguration = GetBlobConfiguration(); + var blobPath = blobConfiguration.BasePath; + + if (CurrentTenant.Id == null) + { + blobPath = Path.Combine(blobPath, "host"); + } + else + { + blobPath = Path.Combine(blobPath, "tenants", CurrentTenant.Id.Value.ToString("D")); + } + DirectoryHelper.CreateIfNotExists(blobPath); + + if (blobConfiguration.AppendContainerNameToBasePath && + !bucketName.IsNullOrWhiteSpace()) + { + blobPath = Path.Combine(blobPath, bucketName); + } + if (!blobName.IsNullOrWhiteSpace()) + { + blobPath = Path.Combine(blobPath, blobName.RemovePreFix("/")); + } + + return blobPath; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.Generated.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.Generated.cs new file mode 100644 index 000000000..99fc49b33 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.Generated.cs @@ -0,0 +1,85 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IBlobAppService), typeof(BlobClientProxy))] +public partial class BlobClientProxy : ClientProxyBase, IBlobAppService +{ + public virtual async Task CreateFileAsync(BlobFileCreateDto input) + { + return await RequestAsync(nameof(CreateFileAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileCreateDto), input } + }); + } + + public virtual async Task CreateChunkFileAsync(BlobFileChunkCreateDto input) + { + await RequestAsync(nameof(CreateChunkFileAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileChunkCreateDto), input } + }); + } + + public virtual async Task CreateFolderAsync(BlobFolderCreateDto input) + { + return await RequestAsync(nameof(CreateFolderAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFolderCreateDto), input } + }); + } + + public virtual async Task DeleteAsync(Guid id) + { + await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetContentAsync(Guid id) + { + return await RequestAsync(nameof(GetContentAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetContentByNameAsync(BlobDownloadByNameInput input) + { + return await RequestAsync(nameof(GetContentByNameAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobDownloadByNameInput), input } + }); + } + + public virtual async Task GetAsync(Guid id) + { + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task> GetListAsync(BlobGetPagedListInput input) + { + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobGetPagedListInput), input } + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.cs new file mode 100644 index 000000000..b359c9883 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of BlobClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public partial class BlobClientProxy +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.Generated.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.Generated.cs new file mode 100644 index 000000000..75b934f7f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.Generated.cs @@ -0,0 +1,52 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IBlobContainerAppService), typeof(BlobContainerClientProxy))] +public partial class BlobContainerClientProxy : ClientProxyBase, IBlobContainerAppService +{ + public virtual async Task CreateAsync(BlobContainerCreateDto input) + { + return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobContainerCreateDto), input } + }); + } + + public virtual async Task DeleteAsync(Guid id) + { + await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetAsync(Guid id) + { + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task> GetListAsync(BlobContainerGetPagedListInput input) + { + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobContainerGetPagedListInput), input } + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.cs new file mode 100644 index 000000000..2036443a4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobContainerClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of BlobContainerClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public partial class BlobContainerClientProxy +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobType.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobType.cs new file mode 100644 index 000000000..5174034f5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/BlobType.cs @@ -0,0 +1,16 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public enum BlobType +{ + Folder = 0, + File = 1 +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs new file mode 100644 index 000000000..9809764d6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerCreateDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerCreateDto +{ + public string Name { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs new file mode 100644 index 000000000..c04e9783d --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerDto.cs @@ -0,0 +1,17 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerDto : ExtensibleAuditedEntityDto +{ + public string Name { get; set; } + + public string ConcurrencyStamp { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs new file mode 100644 index 000000000..578fe4923 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobContainerGetPagedListInput.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobContainerGetPagedListInput : PagedAndSortedResultRequestDto +{ + public string Filter { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs new file mode 100644 index 000000000..7a1ee583f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDownloadByNameInput.cs @@ -0,0 +1,17 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobDownloadByNameInput +{ + public string ContainerName { get; set; } + + public string BlobName { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs new file mode 100644 index 000000000..32263f6c5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobDto.cs @@ -0,0 +1,28 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobDto : ExtensibleAuditedEntityDto +{ + public string Name { get; set; } + + public string Path { get; set; } + + public BlobType Type { get; set; } + + public string ContentType { get; set; } + + public long Size { get; set; } + + public DateTime? ExpirationTime { get; set; } + + public long DownloadCount { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs new file mode 100644 index 000000000..9b001a545 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateBaseDto.cs @@ -0,0 +1,21 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileChunkCreateBaseDto : BlobFileCreateBaseDto +{ + public long ChunkSize { get; set; } + + public long CurrentChunkSize { get; set; } + + public int ChunkNumber { get; set; } + + public int TotalChunks { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs new file mode 100644 index 000000000..105e825d0 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileChunkCreateDto : BlobFileChunkCreateBaseDto +{ + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs new file mode 100644 index 000000000..1a4db5d92 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileChunkCreateWithoutContainerDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileChunkCreateWithoutContainerDto : BlobFileChunkCreateBaseDto +{ + +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs new file mode 100644 index 000000000..e2e40ef94 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateBaseDto.cs @@ -0,0 +1,22 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileCreateBaseDto +{ + public string CompareMd5 { get; set; } + + public string Name { get; set; } + + public Guid? ParentId { get; set; } + + public IRemoteStreamContent File { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs new file mode 100644 index 000000000..d9ac4ba3f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileCreateDto : BlobFileCreateBaseDto +{ + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs new file mode 100644 index 000000000..f8c711cb3 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFileCreateWithoutContainerDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFileCreateWithoutContainerDto : BlobFileCreateBaseDto +{ + +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs new file mode 100644 index 000000000..2c3758cc6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateBaseDto.cs @@ -0,0 +1,17 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFolderCreateBaseDto +{ + public string Name { get; set; } + + public Guid? ParentId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs new file mode 100644 index 000000000..668ceddf6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFolderCreateDto : BlobFolderCreateBaseDto +{ + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs new file mode 100644 index 000000000..cf2742900 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobFolderCreateWithoutContainerDto.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobFolderCreateWithoutContainerDto : BlobFolderCreateBaseDto +{ + +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs new file mode 100644 index 000000000..672714526 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInput.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobGetPagedListInput : BlobGetPagedListInputBase +{ + public Guid ContainerId { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs new file mode 100644 index 000000000..cd28636d0 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListInputBase.cs @@ -0,0 +1,20 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobGetPagedListInputBase : PagedAndSortedResultRequestDto +{ + public Guid? ParentId { get; set; } + + public BlobType? Type { get; set; } + + public string ContentType { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs new file mode 100644 index 000000000..bea0eb0f7 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Dtos/BlobGetPagedListWithoutContainerInput.cs @@ -0,0 +1,15 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Dtos; + +public class BlobGetPagedListWithoutContainerInput : BlobGetPagedListInputBase +{ + +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobAppService.cs new file mode 100644 index 000000000..2c93954c3 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobAppService.cs @@ -0,0 +1,32 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobAppService : IApplicationService +{ + Task CreateFileAsync(BlobFileCreateDto input); + + Task CreateChunkFileAsync(BlobFileChunkCreateDto input); + + Task CreateFolderAsync(BlobFolderCreateDto input); + + Task DeleteAsync(Guid id); + + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(BlobDownloadByNameInput input); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs new file mode 100644 index 000000000..fcab3bafa --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IBlobContainerAppService.cs @@ -0,0 +1,23 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public interface IBlobContainerAppService : IApplicationService +{ + Task CreateAsync(BlobContainerCreateDto input); + + Task DeleteAsync(Guid id); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobContainerGetPagedListInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs new file mode 100644 index 000000000..18b3e3e2e --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPrivateBlobAppService.cs @@ -0,0 +1,32 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public interface IPrivateBlobAppService : IApplicationService +{ + Task CreateFileAsync(BlobFileCreateWithoutContainerDto input); + + Task CreateChunkFileAsync(BlobFileChunkCreateWithoutContainerDto input); + + Task CreateFolderAsync(BlobFolderCreateWithoutContainerDto input); + + Task DeleteAsync(Guid id); + + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(string name); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListWithoutContainerInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs new file mode 100644 index 000000000..20c816c19 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/IPublicBlobAppService.cs @@ -0,0 +1,24 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public interface IPublicBlobAppService : IApplicationService +{ + Task GetContentAsync(Guid id); + + Task GetContentByNameAsync(string name); + + Task GetAsync(Guid id); + + Task> GetListAsync(BlobGetPagedListWithoutContainerInput input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.Generated.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.Generated.cs new file mode 100644 index 000000000..251e98760 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.Generated.cs @@ -0,0 +1,55 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Integration; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Integration; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IBlobIntegrationService), typeof(BlobIntegrationClientProxy))] +[IntegrationService] +public partial class BlobIntegrationClientProxy : ClientProxyBase, IBlobIntegrationService +{ + public virtual async Task CreateAsync(BlobFileCreateIntegrationDto input) + { + return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileCreateIntegrationDto), input } + }); + } + + public virtual async Task DeleteAsync(BlobFileGetByNameIntegrationDto input) + { + await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileGetByNameIntegrationDto), input } + }); + } + + public virtual async Task ExistsAsync(BlobFileGetByNameIntegrationDto input) + { + return await RequestAsync(nameof(ExistsAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileGetByNameIntegrationDto), input } + }); + } + + public virtual async Task GetContentAsync(BlobFileGetByNameIntegrationDto input) + { + return await RequestAsync(nameof(GetContentAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileGetByNameIntegrationDto), input } + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.cs new file mode 100644 index 000000000..a1f8406ef --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of BlobIntegrationClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Integration; + +public partial class BlobIntegrationClientProxy +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs new file mode 100644 index 000000000..18fa1a881 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileCreateIntegrationDto.cs @@ -0,0 +1,18 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Integration.Dtos; + +public class BlobFileCreateIntegrationDto : BlobFileGetByNameIntegrationDto +{ + public bool? Overwrite { get; set; } + + public IRemoteStreamContent File { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs new file mode 100644 index 000000000..c2ef056cd --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/Dtos/BlobFileGetByNameIntegrationDto.cs @@ -0,0 +1,17 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System; +using System.Collections.Generic; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.ObjectExtending; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Integration.Dtos; + +public class BlobFileGetByNameIntegrationDto +{ + public string ContainerName { get; set; } + + public string BlobName { get; set; } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs new file mode 100644 index 000000000..cc71c5aa5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/Integration/IBlobIntegrationService.cs @@ -0,0 +1,25 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Integration; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Application.Services; +using Volo.Abp.Content; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement.Integration; + +public interface IBlobIntegrationService : IApplicationService +{ + Task CreateAsync(BlobFileCreateIntegrationDto input); + + Task DeleteAsync(BlobFileGetByNameIntegrationDto input); + + Task ExistsAsync(BlobFileGetByNameIntegrationDto input); + + Task GetContentAsync(BlobFileGetByNameIntegrationDto input); +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.Generated.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.Generated.cs new file mode 100644 index 000000000..d1a65250f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.Generated.cs @@ -0,0 +1,85 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IPrivateBlobAppService), typeof(PrivateBlobClientProxy))] +public partial class PrivateBlobClientProxy : ClientProxyBase, IPrivateBlobAppService +{ + public virtual async Task CreateFileAsync(BlobFileCreateWithoutContainerDto input) + { + return await RequestAsync(nameof(CreateFileAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileCreateWithoutContainerDto), input } + }); + } + + public virtual async Task CreateChunkFileAsync(BlobFileChunkCreateWithoutContainerDto input) + { + await RequestAsync(nameof(CreateChunkFileAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFileChunkCreateWithoutContainerDto), input } + }); + } + + public virtual async Task CreateFolderAsync(BlobFolderCreateWithoutContainerDto input) + { + return await RequestAsync(nameof(CreateFolderAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobFolderCreateWithoutContainerDto), input } + }); + } + + public virtual async Task DeleteAsync(Guid id) + { + await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetContentAsync(Guid id) + { + return await RequestAsync(nameof(GetContentAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetContentByNameAsync(string name) + { + return await RequestAsync(nameof(GetContentByNameAsync), new ClientProxyRequestTypeValue + { + { typeof(string), name } + }); + } + + public virtual async Task GetAsync(Guid id) + { + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task> GetListAsync(BlobGetPagedListWithoutContainerInput input) + { + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobGetPagedListWithoutContainerInput), input } + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.cs new file mode 100644 index 000000000..cb643d265 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PrivateBlobClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of PrivateBlobClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public partial class PrivateBlobClientProxy +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.Generated.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.Generated.cs new file mode 100644 index 000000000..a61459dc5 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.Generated.cs @@ -0,0 +1,53 @@ +// This file is automatically generated by ABP framework to use MVC Controllers from CSharp +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Dtos; +using System; +using System.Collections.Generic; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Http.Client.ClientProxying; +using Volo.Abp.Http.Modeling; + +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +[Dependency(ReplaceServices = true)] +[ExposeServices(typeof(IPublicBlobAppService), typeof(PublicBlobClientProxy))] +public partial class PublicBlobClientProxy : ClientProxyBase, IPublicBlobAppService +{ + public virtual async Task GetContentAsync(Guid id) + { + return await RequestAsync(nameof(GetContentAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task GetContentByNameAsync(string name) + { + return await RequestAsync(nameof(GetContentByNameAsync), new ClientProxyRequestTypeValue + { + { typeof(string), name } + }); + } + + public virtual async Task GetAsync(Guid id) + { + return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue + { + { typeof(Guid), id } + }); + } + + public virtual async Task> GetListAsync(BlobGetPagedListWithoutContainerInput input) + { + return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue + { + { typeof(BlobGetPagedListWithoutContainerInput), input } + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.cs new file mode 100644 index 000000000..e2fb77761 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/BlobManagement/PublicBlobClientProxy.cs @@ -0,0 +1,7 @@ +// This file is part of PublicBlobClientProxy, you can customize it here +// ReSharper disable once CheckNamespace +namespace LINGYUN.Abp.BlobManagement; + +public partial class PublicBlobClientProxy +{ +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/blob-management-generate-proxy.json b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/blob-management-generate-proxy.json new file mode 100644 index 000000000..c8a34ed6b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/ClientProxies/blob-management-generate-proxy.json @@ -0,0 +1,10887 @@ +{ + "modules": { + "blob-management": { + "rootPath": "blob-management", + "remoteServiceName": "BlobManagement", + "controllers": { + "LINGYUN.Abp.BlobManagement.BlobContainerController": { + "controllerName": "BlobContainer", + "controllerGroupName": "BlobContainer", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "LINGYUN.Abp.BlobManagement.BlobContainerController", + "interfaces": [ + { + "type": "LINGYUN.Abp.BlobManagement.IBlobContainerAppService", + "name": "IBlobContainerAppService", + "methods": [ + { + "name": "CreateAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto" + } + }, + { + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto" + } + }, + { + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + } + ] + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "api/blob-management/containers", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobContainerAppService" + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/blob-management/containers/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobContainerAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/blob-management/containers/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobContainerAppService" + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/blob-management/containers", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobContainerAppService" + } + } + }, + "LINGYUN.Abp.BlobManagement.BlobController": { + "controllerName": "Blob", + "controllerGroupName": "Blob", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "LINGYUN.Abp.BlobManagement.BlobController", + "interfaces": [ + { + "type": "LINGYUN.Abp.BlobManagement.IBlobAppService", + "name": "IBlobAppService", + "methods": [ + { + "name": "CreateFileAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "CreateChunkFileAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "CreateFolderAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "GetContentAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetContentByNameAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + } + ] + } + ], + "actions": { + "CreateFileAsyncByInput": { + "uniqueName": "CreateFileAsyncByInput", + "name": "CreateFileAsync", + "httpMethod": "POST", + "url": "api/blob-management/blobs/file", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CompareMd5", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "CreateChunkFileAsyncByInput": { + "uniqueName": "CreateChunkFileAsyncByInput", + "name": "CreateChunkFileAsync", + "httpMethod": "POST", + "url": "api/blob-management/blobs/file/chunk", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CurrentChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ChunkNumber", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TotalChunks", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CompareMd5", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "CreateFolderAsyncByInput": { + "uniqueName": "CreateFolderAsyncByInput", + "name": "CreateFolderAsync", + "httpMethod": "POST", + "url": "api/blob-management/blobs/folder", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/blob-management/blobs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "GetContentAsyncById": { + "uniqueName": "GetContentAsyncById", + "name": "GetContentAsync", + "httpMethod": "GET", + "url": "api/blob-management/blobs/uid/{id}/content", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "GetContentByNameAsyncByInput": { + "uniqueName": "GetContentByNameAsyncByInput", + "name": "GetContentByNameAsync", + "httpMethod": "GET", + "url": "api/blob-management/blobs/content", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/blob-management/blobs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/blob-management/blobs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Type", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.BlobType?", + "typeSimple": "enum?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IBlobAppService" + } + } + }, + "LINGYUN.Abp.BlobManagement.Integration.BlobIntegrationController": { + "controllerName": "BlobIntegration", + "controllerGroupName": "BlobIntegration", + "isRemoteService": true, + "isIntegrationService": true, + "apiVersion": null, + "type": "LINGYUN.Abp.BlobManagement.Integration.BlobIntegrationController", + "interfaces": [ + { + "type": "LINGYUN.Abp.BlobManagement.Integration.IBlobIntegrationService", + "name": "IBlobIntegrationService", + "methods": [ + { + "name": "CreateAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "ExistsAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + } + }, + { + "name": "GetContentAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + } + ] + } + ], + "actions": { + "CreateAsyncByInput": { + "uniqueName": "CreateAsyncByInput", + "name": "CreateAsync", + "httpMethod": "POST", + "url": "integration-api/blob-management/blobs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "Overwrite", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.Integration.IBlobIntegrationService" + }, + "DeleteAsyncByInput": { + "uniqueName": "DeleteAsyncByInput", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "integration-api/blob-management/blobs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.Integration.IBlobIntegrationService" + }, + "ExistsAsyncByInput": { + "uniqueName": "ExistsAsyncByInput", + "name": "ExistsAsync", + "httpMethod": "GET", + "url": "integration-api/blob-management/blobs/exists", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Boolean", + "typeSimple": "boolean" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.Integration.IBlobIntegrationService" + }, + "GetContentAsyncByInput": { + "uniqueName": "GetContentAsyncByInput", + "name": "GetContentAsync", + "httpMethod": "GET", + "url": "integration-api/blob-management/blobs/download", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.Integration.IBlobIntegrationService" + } + } + }, + "LINGYUN.Abp.BlobManagement.PrivateBlobController": { + "controllerName": "PrivateBlob", + "controllerGroupName": "PrivateBlob", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "LINGYUN.Abp.BlobManagement.PrivateBlobController", + "interfaces": [ + { + "type": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService", + "name": "IPrivateBlobAppService", + "methods": [ + { + "name": "CreateFileAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "CreateChunkFileAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "CreateFolderAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "DeleteAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + } + }, + { + "name": "GetContentAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetContentByNameAsync", + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + } + ] + } + ], + "actions": { + "CreateFileAsyncByInput": { + "uniqueName": "CreateFileAsyncByInput", + "name": "CreateFileAsync", + "httpMethod": "POST", + "url": "api/blob-management/private/blobs/file", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "CompareMd5", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "CreateChunkFileAsyncByInput": { + "uniqueName": "CreateChunkFileAsyncByInput", + "name": "CreateChunkFileAsync", + "httpMethod": "POST", + "url": "api/blob-management/private/blobs/file/chunk", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CurrentChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ChunkNumber", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "TotalChunks", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "CompareMd5", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Form", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "FormFile", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "CreateFolderAsyncByInput": { + "uniqueName": "CreateFolderAsyncByInput", + "name": "CreateFolderAsync", + "httpMethod": "POST", + "url": "api/blob-management/private/blobs/folder", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "input", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "Body", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "DeleteAsyncById": { + "uniqueName": "DeleteAsyncById", + "name": "DeleteAsync", + "httpMethod": "DELETE", + "url": "api/blob-management/private/blobs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "System.Void", + "typeSimple": "System.Void" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "GetContentAsyncById": { + "uniqueName": "GetContentAsyncById", + "name": "GetContentAsync", + "httpMethod": "GET", + "url": "api/blob-management/private/blobs/uid/{id}/content", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "GetContentByNameAsyncByName": { + "uniqueName": "GetContentByNameAsyncByName", + "name": "GetContentByNameAsync", + "httpMethod": "GET", + "url": "api/blob-management/private/blobs/content/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/blob-management/private/blobs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/blob-management/private/blobs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Type", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.BlobType?", + "typeSimple": "enum?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": false, + "authorizeDatas": [ + { + "policy": null, + "roles": null + } + ], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPrivateBlobAppService" + } + } + }, + "LINGYUN.Abp.BlobManagement.PublicBlobController": { + "controllerName": "PublicBlob", + "controllerGroupName": "PublicBlob", + "isRemoteService": true, + "isIntegrationService": false, + "apiVersion": null, + "type": "LINGYUN.Abp.BlobManagement.PublicBlobController", + "interfaces": [ + { + "type": "LINGYUN.Abp.BlobManagement.IPublicBlobAppService", + "name": "IPublicBlobAppService", + "methods": [ + { + "name": "GetContentAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetContentByNameAsync", + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + } + }, + { + "name": "GetAsync", + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + } + }, + { + "name": "GetListAsync", + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "isOptional": false, + "defaultValue": null + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + } + } + ] + } + ], + "actions": { + "GetContentAsyncById": { + "uniqueName": "GetContentAsyncById", + "name": "GetContentAsync", + "httpMethod": "GET", + "url": "api/blob-management/public/blobs/uid/{id}/content", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPublicBlobAppService" + }, + "GetContentByNameAsyncByName": { + "uniqueName": "GetContentByNameAsyncByName", + "name": "GetContentByNameAsync", + "httpMethod": "GET", + "url": "api/blob-management/public/blobs/content/{name}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "name", + "typeAsString": "System.String, System.Private.CoreLib", + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "name", + "name": "name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPublicBlobAppService" + }, + "GetAsyncById": { + "uniqueName": "GetAsyncById", + "name": "GetAsync", + "httpMethod": "GET", + "url": "api/blob-management/public/blobs/{id}", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "id", + "typeAsString": "System.Guid, System.Private.CoreLib", + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "id", + "name": "id", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": [], + "bindingSourceId": "Path", + "descriptorName": "" + } + ], + "returnValue": { + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPublicBlobAppService" + }, + "GetListAsyncByInput": { + "uniqueName": "GetListAsyncByInput", + "name": "GetListAsync", + "httpMethod": "GET", + "url": "api/blob-management/public/blobs", + "supportedVersions": [], + "parametersOnMethod": [ + { + "name": "input", + "typeAsString": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput, LINGYUN.Abp.BlobManagement.Application.Contracts", + "type": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "typeSimple": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput", + "isOptional": false, + "defaultValue": null + } + ], + "parameters": [ + { + "nameOnMethod": "input", + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Type", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.BlobType?", + "typeSimple": "enum?", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + }, + { + "nameOnMethod": "input", + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isOptional": false, + "defaultValue": null, + "constraintTypes": null, + "bindingSourceId": "ModelBinding", + "descriptorName": "input" + } + ], + "returnValue": { + "type": "Volo.Abp.Application.Dtos.PagedResultDto", + "typeSimple": "Volo.Abp.Application.Dtos.PagedResultDto" + }, + "allowAnonymous": null, + "authorizeDatas": [], + "implementFrom": "LINGYUN.Abp.BlobManagement.IPublicBlobAppService" + } + } + } + } + } + }, + "types": { + "LINGYUN.Abp.AspNetCore.Mvc.Localization.GetLanguageWithFilterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.GetResourceWithFilterDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.GetTextByKeyInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.GetTextsInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TargetCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnlyNull", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.LanguageDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TwoLetterISOLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.ResourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.TextDifferenceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TargetCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TargetValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.AspNetCore.Mvc.Localization.TextDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.BlobType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Folder", + "File" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobContainerGetPagedListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobDownloadByNameInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Type", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.BlobType", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ExpirationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "DownloadCount", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateBaseDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CurrentChunkSize", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ChunkNumber", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TotalChunks", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateWithoutContainerDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileChunkCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateBaseDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CompareMd5", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateWithoutContainerDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFileCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateBaseDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateWithoutContainerDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobFolderCreateBaseDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInput": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInputBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInputBase": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Type", + "jsonName": null, + "type": "LINGYUN.Abp.BlobManagement.BlobType?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListWithoutContainerInput": { + "baseType": "LINGYUN.Abp.BlobManagement.Dtos.BlobGetPagedListInputBase", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileCreateIntegrationDto": { + "baseType": "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Overwrite", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Abp.BlobManagement.Integration.Dtos.BlobFileGetByNameIntegrationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ContainerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataCreateDto": { + "baseType": "LINGYUN.Platform.Datas.DataCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Datas.DataCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Code", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Items", + "jsonName": null, + "type": "[LINGYUN.Platform.Datas.DataItemDto]", + "typeSimple": "[LINGYUN.Platform.Datas.DataItemDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataItemCreateDto": { + "baseType": "LINGYUN.Platform.Datas.DataItemCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataItemCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "AllowBeNull", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "LINGYUN.Platform.Datas.ValueType", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataItemDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "AllowBeNull", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ValueType", + "jsonName": null, + "type": "LINGYUN.Platform.Datas.ValueType", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.DataItemUpdateDto": { + "baseType": "LINGYUN.Platform.Datas.DataItemCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Platform.Datas.DataMoveDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Datas.DataUpdateDto": { + "baseType": "LINGYUN.Platform.Datas.DataCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Platform.Datas.GetDataListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Datas.ValueType": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "String", + "Numeic", + "Boolean", + "Date", + "DateTime", + "Array", + "Object" + ], + "enumValues": [ + 0, + 1, + 2, + 3, + 4, + 5, + 6 + ], + "genericArguments": null, + "properties": null + }, + "LINGYUN.Platform.Feedbacks.FeedbackAttachmentDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackAttachmentGetInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FeedbackId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackAttachmentTempFileCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackAttachmentTempFileDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackAttachmentUploadInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackCommentDto": { + "baseType": "Volo.Abp.Application.Dtos.AuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Category", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Attachments", + "jsonName": null, + "type": "[LINGYUN.Platform.Feedbacks.FeedbackAttachmentTempFileCreateDto]", + "typeSimple": "[LINGYUN.Platform.Feedbacks.FeedbackAttachmentTempFileCreateDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Category", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Status", + "jsonName": null, + "type": "LINGYUN.Platform.Feedbacks.FeedbackStatus", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Comments", + "jsonName": null, + "type": "[LINGYUN.Platform.Feedbacks.FeedbackCommentDto]", + "typeSimple": "[LINGYUN.Platform.Feedbacks.FeedbackCommentDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Attachments", + "jsonName": null, + "type": "[LINGYUN.Platform.Feedbacks.FeedbackAttachmentDto]", + "typeSimple": "[LINGYUN.Platform.Feedbacks.FeedbackAttachmentDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Category", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Status", + "jsonName": null, + "type": "LINGYUN.Platform.Feedbacks.FeedbackStatus?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Feedbacks.FeedbackStatus": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Created", + "InProgress", + "Closed", + "Resolved" + ], + "enumValues": [ + 1, + 2, + 3, + 4 + ], + "genericArguments": null, + "properties": null + }, + "LINGYUN.Platform.Layouts.GetLayoutListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Layouts.LayoutCreateDto": { + "baseType": "LINGYUN.Platform.Layouts.LayoutCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DataId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Layouts.LayoutCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Redirect", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Layouts.LayoutDto": { + "baseType": "LINGYUN.Platform.Routes.RouteDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DataId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Layouts.LayoutUpdateDto": { + "baseType": "LINGYUN.Platform.Layouts.LayoutCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Platform.Menus.GetMenuInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuCreateDto": { + "baseType": "LINGYUN.Platform.Menus.MenuCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "LayoutId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Redirect", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Component", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Meta", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuDto": { + "baseType": "LINGYUN.Platform.Routes.RouteDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Code", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Component", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "LayoutId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsPublic", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Startup", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuGetAllInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Reverse", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LayoutId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Menus.MenuGetByRoleInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Role", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 80, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuGetByUserInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.MenuGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParentId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "LayoutId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Menus.MenuUpdateDto": { + "baseType": "LINGYUN.Platform.Menus.MenuCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Platform.Menus.RoleMenuInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 80, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "StartupMenuId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "MenuIds", + "jsonName": null, + "type": "[System.Guid]", + "typeSimple": "[string]", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.RoleMenuStartupInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RoleName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 80, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuCreateDto": { + "baseType": "LINGYUN.Platform.Menus.UserFavoriteMenuCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "MenuId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Color", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "AliasName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Icon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 512, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuDto": { + "baseType": "Volo.Abp.Application.Dtos.AuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "MenuId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "AliasName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Color", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Icon", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuGetListInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuRemoveInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "MenuId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserFavoriteMenuUpdateDto": { + "baseType": "LINGYUN.Platform.Menus.UserFavoriteMenuCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserMenuInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "StartupMenuId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "MenuIds", + "jsonName": null, + "type": "[System.Guid]", + "typeSimple": "[string]", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Menus.UserMenuStartupInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Framework", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.EmailMessageAttachmentDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "BlobName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.EmailMessageCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "To", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "From", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Subject", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsBodyHtml", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CC", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Normalize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Priority", + "jsonName": null, + "type": "System.Net.Mail.MailPriority?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BodyTransferEncoding", + "jsonName": null, + "type": "System.Net.Mime.TransferEncoding?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "DeliveryNotificationOptions", + "jsonName": null, + "type": "System.Net.Mail.DeliveryNotificationOptions?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Attachments", + "jsonName": null, + "type": "[Volo.Abp.Content.IRemoteStreamContent]", + "typeSimple": "[Volo.Abp.Content.IRemoteStreamContent]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Headers", + "jsonName": null, + "type": "[LINGYUN.Platform.Messages.EmailMessageHeaderDto]", + "typeSimple": "[LINGYUN.Platform.Messages.EmailMessageHeaderDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.EmailMessageDto": { + "baseType": "LINGYUN.Platform.Messages.MessageDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "From", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Subject", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsBodyHtml", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CC", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Normalize", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Priority", + "jsonName": null, + "type": "System.Net.Mail.MailPriority?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BodyTransferEncoding", + "jsonName": null, + "type": "System.Net.Mime.TransferEncoding?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "DeliveryNotificationOptions", + "jsonName": null, + "type": "System.Net.Mail.DeliveryNotificationOptions?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Attachments", + "jsonName": null, + "type": "[LINGYUN.Platform.Messages.EmailMessageAttachmentDto]", + "typeSimple": "[LINGYUN.Platform.Messages.EmailMessageAttachmentDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Headers", + "jsonName": null, + "type": "[LINGYUN.Platform.Messages.EmailMessageHeaderDto]", + "typeSimple": "[LINGYUN.Platform.Messages.EmailMessageHeaderDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.EmailMessageGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "EmailAddress", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "From", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Subject", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Status", + "jsonName": null, + "type": "LINGYUN.Platform.Messages.MessageStatus?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Priority", + "jsonName": null, + "type": "System.Net.Mail.MailPriority?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BeginSendTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EndSendTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Messages.EmailMessageHeaderDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Key", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 64, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Value", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 128, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.MessageDto": { + "baseType": "Volo.Abp.Application.Dtos.AuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Sender", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Provider", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Receiver", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "SendTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "SendCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Status", + "jsonName": null, + "type": "LINGYUN.Platform.Messages.MessageStatus", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Reason", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.MessageStatus": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Sent", + "Failed", + "Pending" + ], + "enumValues": [ + 0, + 10, + -1 + ], + "genericArguments": null, + "properties": null + }, + "LINGYUN.Platform.Messages.SmsMessageCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Text", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Messages.SmsMessageDto": { + "baseType": "LINGYUN.Platform.Messages.MessageDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "LINGYUN.Platform.Messages.SmsMessageGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Content", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Status", + "jsonName": null, + "type": "LINGYUN.Platform.Messages.MessageStatus?", + "typeSimple": "enum?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BeginSendTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EndSendTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Packages.PackageBlobDownloadInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageBlobDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64?", + "typeSimple": "number?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Summary", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CreatedAt", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UpdatedAt", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "License", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Authors", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "SHA256", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DownloadCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageBlobRemoveDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageBlobUploadDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Size", + "jsonName": null, + "type": "System.Int64?", + "typeSimple": "number?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Summary", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 256, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CreatedAt", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UpdatedAt", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "License", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Authors", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 100, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "File", + "jsonName": null, + "type": "Volo.Abp.Content.IRemoteStreamContent", + "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageCreateDto": { + "baseType": "LINGYUN.Platform.Packages.PackageCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Version", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Note", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ForceUpdate", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Authors", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 100, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Level", + "jsonName": null, + "type": "LINGYUN.Platform.Packages.PackageLevel", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Note", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Version", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ForceUpdate", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Authors", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Level", + "jsonName": null, + "type": "LINGYUN.Platform.Packages.PackageLevel", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Blobs", + "jsonName": null, + "type": "[LINGYUN.Platform.Packages.PackageBlobDto]", + "typeSimple": "[LINGYUN.Platform.Packages.PackageBlobDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageGetLatestInput": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Version", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageGetPagedListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Note", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 1024, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Version", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ForceUpdate", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Authors", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": 100, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Packages.PackageLevel": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Resource", + "Full", + "None" + ], + "enumValues": [ + 0, + 1, + -1 + ], + "genericArguments": null, + "properties": null + }, + "LINGYUN.Platform.Packages.PackageUpdateDto": { + "baseType": "LINGYUN.Platform.Packages.PackageCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Portal.EnterpriseCreateDto": { + "baseType": "LINGYUN.Platform.Portal.EnterpriseCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Portal.EnterpriseCreateOrUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 512, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Logo", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 512, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Address", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 255, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LegalMan", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 60, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TaxCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 40, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OrganizationCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 16, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RegistrationCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": 0, + "maxLength": 30, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RegistrationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ExpirationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Portal.EnterpriseDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Logo", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Address", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LegalMan", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TaxCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OrganizationCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RegistrationCode", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RegistrationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ExpirationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Portal.EnterpriseGetListInput": { + "baseType": "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Filter", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "BeginRegistrationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EndRegistrationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BeginExpirationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EndExpirationDate", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "LINGYUN.Platform.Portal.EnterpriseUpdateDto": { + "baseType": "LINGYUN.Platform.Portal.EnterpriseCreateOrUpdateDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ConcurrencyStamp", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "LINGYUN.Platform.Routes.RouteDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Path", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Description", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Redirect", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Meta", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "System.Net.Mail.DeliveryNotificationOptions": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "None", + "OnSuccess", + "OnFailure", + "Delay", + "Never" + ], + "enumValues": [ + 0, + 1, + 2, + 4, + 134217728 + ], + "genericArguments": null, + "properties": null + }, + "System.Net.Mail.MailPriority": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Normal", + "Low", + "High" + ], + "enumValues": [ + 0, + 1, + 2 + ], + "genericArguments": null, + "properties": null + }, + "System.Net.Mime.TransferEncoding": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "QuotedPrintable", + "Base64", + "SevenBit", + "EightBit", + "Unknown" + ], + "enumValues": [ + 0, + 1, + 2, + 3, + -1 + ], + "genericArguments": null, + "properties": null + }, + "System.Nullable": { + "baseType": "System.ValueType", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "HasValue", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Value", + "jsonName": null, + "type": "T", + "typeSimple": "T", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Application.Dtos.AuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.CreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.CreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.Application.Dtos.EntityDto": { + "baseType": "Volo.Abp.Application.Dtos.EntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "LastModificationTime", + "jsonName": null, + "type": "System.DateTime?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "LastModifierId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleCreationAuditedEntityDto": { + "baseType": "Volo.Abp.Application.Dtos.ExtensibleEntityDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TPrimaryKey" + ], + "properties": [ + { + "name": "CreationTime", + "jsonName": null, + "type": "System.DateTime", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CreatorId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.ExtensibleEntityDto": { + "baseType": "Volo.Abp.ObjectExtending.ExtensibleObject", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "TKey" + ], + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "TKey", + "typeSimple": "TKey", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.LimitedResultRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "MaxResultCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": "1", + "maximum": "2147483647", + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Application.Dtos.ListResultDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Items", + "jsonName": null, + "type": "[T]", + "typeSimple": "[T]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedAndSortedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.PagedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Sorting", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultDto": { + "baseType": "Volo.Abp.Application.Dtos.ListResultDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "TotalCount", + "jsonName": null, + "type": "System.Int64", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Application.Dtos.PagedResultRequestDto": { + "baseType": "Volo.Abp.Application.Dtos.LimitedResultRequestDto", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "SkipCount", + "jsonName": null, + "type": "System.Int32", + "typeSimple": "number", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": "0", + "maximum": "2147483647", + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "GrantedPolicies", + "jsonName": null, + "type": "{System.String:System.Boolean}", + "typeSimple": "{string:boolean}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Localization", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Auth", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationAuthConfigurationDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Setting", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CurrentUser", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Features", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "GlobalFeatures", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "MultiTenancy", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CurrentTenant", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Timing", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Clock", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ObjectExtensions", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationConfigurationRequestOptions": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeLocalizationResources", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationGlobalFeatureConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "EnabledFeatures", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.Collections.Generic.Dictionary}", + "typeSimple": "{string:System.Collections.Generic.Dictionary}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Resources", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Languages", + "jsonName": null, + "type": "[Volo.Abp.Localization.LanguageInfo]", + "typeSimple": "[Volo.Abp.Localization.LanguageInfo]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CurrentCulture", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultResourceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "LanguagesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LanguageFilesMap", + "jsonName": null, + "type": "{System.String:[Volo.Abp.NameValue]}", + "typeSimple": "{string:[Volo.Abp.NameValue]}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Resources", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CurrentCulture", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": true, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnlyDynamics", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationLocalizationResourceDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Texts", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "BaseResources", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ApplicationSettingConfigurationDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Values", + "jsonName": null, + "type": "{System.String:System.String}", + "typeSimple": "{string:string}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ClockDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Kind", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentCultureDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "EnglishName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ThreeLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TwoLetterIsoLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsRightToLeft", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "NativeName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DateTimeFormat", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.CurrentUserDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAuthenticated", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "TenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ImpersonatorUserId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ImpersonatorTenantId", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ImpersonatorUserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ImpersonatorTenantName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "UserName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "SurName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Email", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EmailVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "PhoneNumber", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "PhoneNumberVerified", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Roles", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "SessionId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.DateTimeFormatDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CalendarAlgorithmType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DateTimeFormatLong", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ShortDatePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "FullDateTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DateSeparator", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ShortTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LongTimePattern", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Properties", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Fields", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "LocalizationResource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumFieldDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Value", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnGet", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnCreate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiCreateDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnUpdate", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiGetDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiUpdateDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Config", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Api", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyApiDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Ui", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Policy", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPolicyDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPolicyDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Attributes", + "jsonName": null, + "type": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "typeSimple": "[Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyAttributeDto]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyFeaturePolicyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RequiresAll", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyGlobalFeaturePolicyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Features", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RequiresAll", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPermissionPolicyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "PermissionNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RequiresAll", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPolicyDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "GlobalFeatures", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyGlobalFeaturePolicyDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyGlobalFeaturePolicyDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Features", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyFeaturePolicyDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyFeaturePolicyDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Permissions", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPermissionPolicyDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyPermissionPolicyDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "OnTable", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnCreateForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "OnEditForm", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Lookup", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiFormDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiLookupDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ResultListPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayPropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ValuePropertyName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "FilterParamName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionPropertyUiTableDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsVisible", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.LocalizableStringDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Resource", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Entities", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.EntityExtensionDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Configuration", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ObjectExtensionsDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ModuleExtensionDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Enums", + "jsonName": null, + "type": "{System.String:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "typeSimple": "{string:Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.ObjectExtending.ExtensionEnumDto}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Iana", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.IanaTimeZone", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Windows", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimingDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZone", + "jsonName": null, + "type": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "typeSimple": "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.TimeZone", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.ApplicationConfigurations.WindowsTimeZone": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "TimeZoneId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.CurrentTenantDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Id", + "jsonName": null, + "type": "System.Guid?", + "typeSimple": "string?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "IsAvailable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.AspNetCore.Mvc.MultiTenancy.MultiTenancyInfoDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IsEnabled", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UserSharingStrategy", + "jsonName": null, + "type": "Volo.Abp.MultiTenancy.TenantUserSharingStrategy", + "typeSimple": "enum", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Content.IRemoteStreamContent": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "FileName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ContentType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ContentLength", + "jsonName": null, + "type": "System.Int64?", + "typeSimple": "number?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Http.Modeling.ActionApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "UniqueName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "HttpMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Url", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "SupportedVersions", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ParametersOnMethod", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Parameters", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ParameterApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ReturnValue", + "jsonName": null, + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "AllowAnonymous", + "jsonName": null, + "type": "System.Boolean?", + "typeSimple": "boolean?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "AuthorizeDatas", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.AuthorizeDataApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.AuthorizeDataApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ImplementFrom", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Modules", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ModuleApiDescriptionModel}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Types", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.TypeApiDescriptionModel}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.ApplicationApiDescriptionModelRequestDto": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "IncludeTypes", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.AuthorizeDataApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Policy", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Roles", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ControllerName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ControllerGroupName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "IsRemoteService", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsIntegrationService", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ApiVersion", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Interfaces", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Actions", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ActionApiDescriptionModel}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.ControllerInterfaceApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Methods", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.InterfaceMethodApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ParametersOnMethod", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "ReturnValue", + "jsonName": null, + "type": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "typeSimple": "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.MethodParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TypeAsString", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Http.Modeling.ModuleApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "RootPath", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "RemoteServiceName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Controllers", + "jsonName": null, + "type": "{System.String:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "typeSimple": "{string:Volo.Abp.Http.Modeling.ControllerApiDescriptionModel}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.ParameterApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "NameOnMethod", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "IsOptional", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DefaultValue", + "jsonName": null, + "type": "System.Object", + "typeSimple": "object", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "ConstraintTypes", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "BindingSourceId", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "DescriptorName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Http.Modeling.PropertyApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "JsonName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "IsRequired", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "MinLength", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "MaxLength", + "jsonName": null, + "type": "System.Int32?", + "typeSimple": "number?", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Minimum", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Maximum", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Regex", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "IsNullable", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.ReturnValueApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "Type", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TypeSimple", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.Http.Modeling.TypeApiDescriptionModel": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "BaseType", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "IsEnum", + "jsonName": null, + "type": "System.Boolean", + "typeSimple": "boolean", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "EnumNames", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "EnumValues", + "jsonName": null, + "type": "[System.Object]", + "typeSimple": "[object]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "GenericArguments", + "jsonName": null, + "type": "[System.String]", + "typeSimple": "[string]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + }, + { + "name": "Properties", + "jsonName": null, + "type": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "typeSimple": "[Volo.Abp.Http.Modeling.PropertyApiDescriptionModel]", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.Localization.LanguageInfo": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "CultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "UiCultureName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "DisplayName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "TwoLetterISOLanguageName", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + }, + "Volo.Abp.MultiTenancy.TenantUserSharingStrategy": { + "baseType": "System.Enum", + "isEnum": true, + "enumNames": [ + "Isolated", + "Shared" + ], + "enumValues": [ + 0, + 1 + ], + "genericArguments": null, + "properties": null + }, + "Volo.Abp.NameValue": { + "baseType": "Volo.Abp.NameValue", + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [] + }, + "Volo.Abp.NameValue": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": [ + "T" + ], + "properties": [ + { + "name": "Name", + "jsonName": null, + "type": "System.String", + "typeSimple": "string", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + }, + { + "name": "Value", + "jsonName": null, + "type": "T", + "typeSimple": "T", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": true + } + ] + }, + "Volo.Abp.ObjectExtending.ExtensibleObject": { + "baseType": null, + "isEnum": false, + "enumNames": null, + "enumValues": null, + "genericArguments": null, + "properties": [ + { + "name": "ExtraProperties", + "jsonName": null, + "type": "{System.String:System.Object}", + "typeSimple": "{string:object}", + "isRequired": false, + "minLength": null, + "maxLength": null, + "minimum": null, + "maximum": null, + "regex": null, + "isNullable": false + } + ] + } + } +} \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN.Abp.OssManagement.HttpApi.Client.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN.Abp.BlobManagement.HttpApi.Client.csproj similarity index 52% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN.Abp.OssManagement.HttpApi.Client.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN.Abp.BlobManagement.HttpApi.Client.csproj index d489798d0..b5f26042f 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN.Abp.OssManagement.HttpApi.Client.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN.Abp.BlobManagement.HttpApi.Client.csproj @@ -1,32 +1,26 @@ - - - - - - - netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 - LINGYUN.Abp.OssManagement.HttpApi.Client - LINGYUN.Abp.OssManagement.HttpApi.Client - false - false - false - - - - - - - - - - - - - - - - - - - - + + + + + + + netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 + LINGYUN.Abp.BlobManagement.HttpApi.Client + LINGYUN.Abp.BlobManagement.HttpApi.Client + false + false + false + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiClientModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiClientModule.cs new file mode 100644 index 000000000..5f9433067 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi.Client/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiClientModule.cs @@ -0,0 +1,23 @@ +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.Http.Client; +using Volo.Abp.Modularity; +using Volo.Abp.VirtualFileSystem; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn(typeof(AbpHttpClientModule))] +public class AbpBlobManagementHttpApiClientModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + context.Services.AddStaticHttpClientProxies( + typeof(AbpBlobManagementHttpApiClientModule).Assembly, + "BlobManagement" + ); + + Configure(options => + { + options.FileSets.AddEmbedded(); + }); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN.Abp.OssManagement.HttpApi.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN.Abp.BlobManagement.HttpApi.csproj similarity index 67% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN.Abp.OssManagement.HttpApi.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN.Abp.BlobManagement.HttpApi.csproj index c69ca730c..ef4bcdce2 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN.Abp.OssManagement.HttpApi.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN.Abp.BlobManagement.HttpApi.csproj @@ -5,11 +5,12 @@ net10.0 - LINGYUN.Abp.OssManagement.HttpApi - LINGYUN.Abp.OssManagement.HttpApi + LINGYUN.Abp.BlobManagement.HttpApi + LINGYUN.Abp.BlobManagement.HttpApi false false false + enable @@ -18,7 +19,7 @@ - + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiModule.cs new file mode 100644 index 000000000..d873970ab --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/AbpBlobManagementHttpApiModule.cs @@ -0,0 +1,29 @@ +using LINGYUN.Abp.BlobManagement.Localization; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.Localization; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement; + +[DependsOn( + typeof(AbpBlobManagementApplicationContractsModule), + typeof(AbpAspNetCoreMvcModule) + )] +public class AbpBlobManagementHttpApiModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpBlobManagementHttpApiModule).Assembly); + }); + + PreConfigure(options => + { + options.AddAssemblyResource( + typeof(BlobManagementResource), + typeof(AbpBlobManagementApplicationContractsModule).Assembly); + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobContainerController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobContainerController.cs new file mode 100644 index 000000000..520645463 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobContainerController.cs @@ -0,0 +1,46 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.BlobManagement; + +[Controller] +[Area(BlobManagementRemoteServiceConsts.ModuleName)] +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Route($"api/{BlobManagementRemoteServiceConsts.ModuleName}/containers")] +public class BlobContainerController : AbpControllerBase, IBlobContainerAppService +{ + private readonly IBlobContainerAppService _service; + public BlobContainerController(IBlobContainerAppService service) + { + _service = service; + } + + [HttpPost] + public virtual Task CreateAsync(BlobContainerCreateDto input) + { + return _service.CreateAsync(input); + } + + [HttpDelete("{id}")] + public virtual Task DeleteAsync(Guid id) + { + return _service.DeleteAsync(id); + } + + [HttpGet("{id}")] + public virtual Task GetAsync(Guid id) + { + return _service.GetAsync(id); + } + + [HttpGet] + public virtual Task> GetListAsync(BlobContainerGetPagedListInput input) + { + return _service.GetListAsync(input); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobController.cs new file mode 100644 index 000000000..559abbbf4 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobController.cs @@ -0,0 +1,76 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +[Controller] +[Area(BlobManagementRemoteServiceConsts.ModuleName)] +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Route($"api/{BlobManagementRemoteServiceConsts.ModuleName}/blobs")] +public class BlobController : BlobControllerBase, IBlobAppService +{ + + private readonly IBlobAppService _service; + + public BlobController(IBlobAppService service) + { + _service = service; + } + + [HttpPost("file")] + [IgnoreAntiforgeryToken] + public virtual Task CreateFileAsync([FromForm] BlobFileCreateDto input) + { + input.CompareMd5 ??= GetCompareMd5InHeader(); + return _service.CreateFileAsync(input); + } + + [HttpPost("file/chunk")] + [IgnoreAntiforgeryToken] + public virtual Task CreateChunkFileAsync([FromForm] BlobFileChunkCreateDto input) + { + input.CompareMd5 ??= GetCompareMd5InHeader(); + return _service.CreateChunkFileAsync(input); + } + + [HttpPost("folder")] + public virtual Task CreateFolderAsync(BlobFolderCreateDto input) + { + return _service.CreateFolderAsync(input); + } + + [HttpDelete("{id}")] + public virtual Task DeleteAsync(Guid id) + { + return _service.DeleteAsync(id); + } + + [HttpGet("uid/{id}/content")] + public virtual Task GetContentAsync(Guid id) + { + return _service.GetContentAsync(id); + } + + [HttpGet("content")] + public virtual Task GetContentByNameAsync(BlobDownloadByNameInput input) + { + return _service.GetContentByNameAsync(input); + } + + [HttpGet("{id}")] + public virtual Task GetAsync(Guid id) + { + return _service.GetAsync(id); + } + + [HttpGet] + public virtual Task> GetListAsync(BlobGetPagedListInput input) + { + return _service.GetListAsync(input); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobControllerBase.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobControllerBase.cs new file mode 100644 index 000000000..59d9787e1 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/BlobControllerBase.cs @@ -0,0 +1,14 @@ +using System.Collections.Generic; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.BlobManagement; + +public abstract class BlobControllerBase : AbpControllerBase +{ + private const string CompareMd5HeaderKey = "X-Abp-Blob-Md5"; + + protected virtual string? GetCompareMd5InHeader() + { + return Request.Headers.GetOrDefault(CompareMd5HeaderKey); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationController.cs new file mode 100644 index 000000000..dac00f68f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/Integration/BlobIntegrationController.cs @@ -0,0 +1,47 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement.Integration; + +[Controller] +[Area(BlobManagementRemoteServiceConsts.ModuleName)] +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Route($"integration-api/{BlobManagementRemoteServiceConsts.ModuleName}/blobs")] +public class BlobIntegrationController : AbpControllerBase, IBlobIntegrationService +{ + private readonly IBlobIntegrationService _service; + + public BlobIntegrationController(IBlobIntegrationService service) + { + _service = service; + } + + [HttpPost] + public virtual Task CreateAsync([FromForm] BlobFileCreateIntegrationDto input) + { + return _service.CreateAsync(input); + } + + [HttpDelete] + public virtual Task DeleteAsync(BlobFileGetByNameIntegrationDto input) + { + return _service.DeleteAsync(input); + } + + [HttpGet("exists")] + public virtual Task ExistsAsync(BlobFileGetByNameIntegrationDto input) + { + return _service.ExistsAsync(input); + } + + [HttpGet("download")] + public virtual Task GetContentAsync(BlobFileGetByNameIntegrationDto input) + { + return _service.GetContentAsync(input); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PrivateBlobController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PrivateBlobController.cs new file mode 100644 index 000000000..f8ec336a7 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PrivateBlobController.cs @@ -0,0 +1,76 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Microsoft.AspNetCore.Authorization; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +[Authorize] +[Controller] +[Area(BlobManagementRemoteServiceConsts.ModuleName)] +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Route($"api/{BlobManagementRemoteServiceConsts.ModuleName}/private/blobs")] +public class PrivateBlobController : BlobControllerBase, IPrivateBlobAppService +{ + + private readonly IPrivateBlobAppService _service; + + public PrivateBlobController(IPrivateBlobAppService service) + { + _service = service; + } + + [HttpPost("file")] + public virtual Task CreateFileAsync([FromForm] BlobFileCreateWithoutContainerDto input) + { + input.CompareMd5 ??= GetCompareMd5InHeader(); + return _service.CreateFileAsync(input); + } + + [HttpPost("file/chunk")] + public virtual Task CreateChunkFileAsync([FromForm] BlobFileChunkCreateWithoutContainerDto input) + { + input.CompareMd5 ??= GetCompareMd5InHeader(); + return _service.CreateChunkFileAsync(input); + } + + [HttpPost("folder")] + public virtual Task CreateFolderAsync(BlobFolderCreateWithoutContainerDto input) + { + return _service.CreateFolderAsync(input); + } + + [HttpDelete("{id}")] + public virtual Task DeleteAsync(Guid id) + { + return _service.DeleteAsync(id); + } + + [HttpGet("uid/{id}/content")] + public virtual Task GetContentAsync(Guid id) + { + return _service.GetContentAsync(id); + } + + [HttpGet("content/{name}")] + public virtual Task GetContentByNameAsync(string name) + { + return _service.GetContentByNameAsync(name); + } + + [HttpGet("{id}")] + public virtual Task GetAsync(Guid id) + { + return _service.GetAsync(id); + } + + [HttpGet] + public virtual Task> GetListAsync(BlobGetPagedListWithoutContainerInput input) + { + return _service.GetListAsync(input); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PublicBlobController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PublicBlobController.cs new file mode 100644 index 000000000..aca0a128f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.HttpApi/LINGYUN/Abp/BlobManagement/PublicBlobController.cs @@ -0,0 +1,48 @@ +using LINGYUN.Abp.BlobManagement.Dtos; +using Microsoft.AspNetCore.Mvc; +using System; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.Application.Dtos; +using Volo.Abp.Content; + +namespace LINGYUN.Abp.BlobManagement; + +[Controller] +[Area(BlobManagementRemoteServiceConsts.ModuleName)] +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Route($"api/{BlobManagementRemoteServiceConsts.ModuleName}/public/blobs")] +public class PublicBlobController : BlobControllerBase, IPublicBlobAppService +{ + + private readonly IPublicBlobAppService _service; + + public PublicBlobController(IPublicBlobAppService service) + { + _service = service; + } + + [HttpGet("uid/{id}/content")] + public virtual Task GetContentAsync(Guid id) + { + return _service.GetContentAsync(id); + } + + [HttpGet("content/{name}")] + public virtual Task GetContentByNameAsync(string name) + { + return _service.GetContentByNameAsync(name); + } + + [HttpGet("{id}")] + public virtual Task GetAsync(Guid id) + { + return _service.GetAsync(id); + } + + [HttpGet] + public virtual Task> GetListAsync(BlobGetPagedListWithoutContainerInput input) + { + return _service.GetListAsync(input); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN.Abp.OssManagement.Minio.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN.Abp.BlobManagement.Minio.csproj similarity index 68% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN.Abp.OssManagement.Minio.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN.Abp.BlobManagement.Minio.csproj index 3d3f98e8c..6a009fc9e 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN.Abp.OssManagement.Minio.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN.Abp.BlobManagement.Minio.csproj @@ -5,21 +5,21 @@ net10.0 - LINGYUN.Abp.OssManagement.Minio - LINGYUN.Abp.OssManagement.Minio + LINGYUN.Abp.BlobManagement.Minio + LINGYUN.Abp.BlobManagement.Minio false false false + enable - - + diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/AbpOssManagementMinioModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/AbpBlobManagementMinioModule.cs similarity index 54% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/AbpOssManagementMinioModule.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/AbpBlobManagementMinioModule.cs index 0096428a7..7a3eb21af 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/AbpOssManagementMinioModule.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/AbpBlobManagementMinioModule.cs @@ -5,34 +5,34 @@ using Volo.Abp.BlobStoring; using Volo.Abp.BlobStoring.Minio; using Volo.Abp.Modularity; -namespace LINGYUN.Abp.OssManagement.Minio; +namespace LINGYUN.Abp.BlobManagement.Minio; [DependsOn( - typeof(AbpBlobStoringMinioModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementMinioModule : AbpModule + typeof(AbpBlobManagementDomainModule), + typeof(AbpBlobStoringMinioModule))] +public class AbpBlobManagementMinioModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); - var ossConfiguration = configuration.GetSection("OssManagement"); + var ossConfiguration = configuration.GetSection("BlobManagement"); var ossProvider = ossConfiguration["Provider"]; if (!ossProvider.IsNullOrWhiteSpace() && - "Minio".Equals(ossProvider, StringComparison.InvariantCultureIgnoreCase)) + string.Equals(MinioBlobProvider.ProviderName, ossProvider, StringComparison.InvariantCultureIgnoreCase)) { - context.Services.AddMinioHttpClient(); Configure(options => { - options.Containers.ConfigureAll((containerName, containerConfiguration) => + options.Containers.Configure((containerConfiguration) => { containerConfiguration.UseMinio(oss => { - ossConfiguration.GetSection("Minio").Bind(oss); + ossConfiguration.GetSection(MinioBlobProvider.ProviderName).Bind(oss); }); }); }); - context.Services.AddMinioContainer(); + context.Services.AddMinioHttpClient(); + context.Services.AddTransient(); } } } diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/MinioBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/MinioBlobProvider.cs new file mode 100644 index 000000000..bc449401f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/LINGYUN/Abp/BlobManagement/Minio/MinioBlobProvider.cs @@ -0,0 +1,245 @@ +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using Minio; +using Minio.DataModel.Args; +using Minio.Exceptions; +using System; +using System.IO; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.BlobStoring; +using Volo.Abp.BlobStoring.Minio; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement.Minio; + +public class MinioBlobProvider : IBlobProvider +{ + public const string ProviderName = "Minio"; + public string Name => ProviderName; + + protected ICurrentTenant CurrentTenant { get; } + protected IHttpClientFactory HttpClientFactory { get; } + protected MinioBlobNamingNormalizer BlobNamingNormalizer { get; } + protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } + + public MinioBlobProvider( + ICurrentTenant currentTenant, + IHttpClientFactory httpClientFactory, + MinioBlobNamingNormalizer blobNamingNormalizer, + IBlobContainerConfigurationProvider configurationProvider) + { + CurrentTenant = currentTenant; + HttpClientFactory = httpClientFactory; + BlobNamingNormalizer = blobNamingNormalizer; + ConfigurationProvider = configurationProvider; + } + + public async virtual Task CreateContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = GetMinioClient(); + var bucket = NormalizeContainerName(name); + + if (await BucketExists(client, bucket)) + { + return; + } + + await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucket), cancellationToken); + } + + public async virtual Task DeleteContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = GetMinioClient(); + var bucket = NormalizeContainerName(name); + + if (!await BucketExists(client, bucket)) + { + return; + } + + var deleteBucketArgs = new RemoveBucketArgs() + .WithBucket(bucket); + + await client.RemoveBucketAsync(deleteBucketArgs, cancellationToken); + } + + public async virtual Task DeleteBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = GetMinioClient(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (await ObjectExists(client, bucket, objectName)) + { + var removeObjectArgs = new RemoveObjectArgs() + .WithBucket(bucket) + .WithObject(objectName); + + await client.RemoveObjectAsync(removeObjectArgs, cancellationToken); + } + } + + public virtual Task DeleteFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // Minio没有目录的概念,新建对象时可以模拟目录 + return Task.CompletedTask; + } + + public async virtual Task DownloadBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = GetMinioClient(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (!await ObjectExists(client, bucket, objectName)) + { + return null; + } + + var configuration = GetBlobConfiguration(); + + var downloadUrl = await client.PresignedGetObjectAsync( + new PresignedGetObjectArgs() + .WithBucket(bucket) + .WithObject(objectName) + .WithExpiry(configuration.PresignedGetExpirySeconds)); + + var httpClient = HttpClientFactory.CreateMinioHttpClient(); + + return await httpClient.GetStreamAsync(downloadUrl, cancellationToken); + } + + public virtual Task CreateFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // Minio没有目录的概念,新建对象时可以模拟目录 + return Task.CompletedTask; + } + + public async virtual Task UploadBlobAsync( + string containerName, + string blobName, + Stream content, + CancellationToken cancellationToken = default) + { + var client = GetMinioClient(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + await CreateBucketIfNotExists(client, bucket); + + await client.PutObjectAsync(new PutObjectArgs() + .WithBucket(bucket) + .WithObject(objectName) + .WithStreamData(content) + .WithObjectSize(content.Length), + cancellationToken); + } + + protected virtual IMinioClient GetMinioClient() + { + var configuration = GetBlobConfiguration(); + + var client = new MinioClient() + .WithEndpoint(configuration.EndPoint) + .WithCredentials(configuration.AccessKey, configuration.SecretKey); + + if (configuration.WithSSL) + { + client.WithSSL(); + } + + return client.Build(); + } + + protected async virtual Task CreateBucketIfNotExists(IMinioClient client, string bucket) + { + if (!await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(bucket))) + { + await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucket)); + } + } + + protected async virtual Task BucketExists(IMinioClient client, string bucket) + { + var args = new BucketExistsArgs().WithBucket(bucket); + + return await client.BucketExistsAsync(args); + } + + protected async virtual Task ObjectExists(IMinioClient client, string bucket, string @object) + { + if (await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(bucket))) + { + try + { + await client.StatObjectAsync(new StatObjectArgs().WithBucket(bucket).WithObject(@object)); + } + catch (Exception e) + { + if (e is ObjectNotFoundException) + { + return false; + } + + throw; + } + + return true; + } + + return false; + } + + protected virtual MinioBlobProviderConfiguration GetBlobConfiguration() + { + var configuration = ConfigurationProvider.Get(); + var blobConfiguration = configuration.GetMinioConfiguration(); + return blobConfiguration; + } + + protected virtual string NormalizeContainerName(string containerName) + { + if (!containerName.StartsWith("abp-")) + { + containerName = "abp-" + containerName; + } + return BlobNamingNormalizer.NormalizeContainerName(containerName); + } + + protected virtual string GetPrefixPath() + { + return CurrentTenant.Id == null + ? $"host/" + : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/"; + } + + protected virtual string CalculateBlobName(string blobName) + { + var blobPath = GetPrefixPath(); + + if (!blobName.IsNullOrWhiteSpace()) + { + blobPath += blobName.RemovePreFix("/"); + } + + return BlobNamingNormalizer.NormalizeBlobName(blobPath); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs similarity index 86% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs index f2e48fcb8..bc56e7123 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioHttpClientFactoryServiceCollectionExtensions.cs @@ -3,7 +3,7 @@ namespace Microsoft.Extensions.DependencyInjection; internal static class MinioHttpClientFactoryServiceCollectionExtensions { - private const string HttpClientName = "__AbpMinioHttpClient"; + private const string HttpClientName = "__BlobManagement_Minio_Client"; public static IServiceCollection AddMinioHttpClient(this IServiceCollection services) { services.AddHttpClient(HttpClientName); diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN.Abp.OssManagement.SettingManagement.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN.Abp.BlobManagement.SettingManagement.csproj similarity index 69% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN.Abp.OssManagement.SettingManagement.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN.Abp.BlobManagement.SettingManagement.csproj index ae06a9139..fbec967d4 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN.Abp.OssManagement.SettingManagement.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN.Abp.BlobManagement.SettingManagement.csproj @@ -1,26 +1,28 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.SettingManagement - LINGYUN.Abp.OssManagement.SettingManagement - false - false - false - - - - - - - - - - - - - - + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.SettingManagement + LINGYUN.Abp.BlobManagement.SettingManagement + false + false + false + enable + + + + + + + + + + + + + + + diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/AbpOssManagementSettingManagementModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/AbpBlobManagementSettingManagementModule.cs similarity index 51% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/AbpOssManagementSettingManagementModule.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/AbpBlobManagementSettingManagementModule.cs index bcb49ef35..64883baba 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/AbpOssManagementSettingManagementModule.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/AbpBlobManagementSettingManagementModule.cs @@ -1,19 +1,19 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement.SettingManagement; - -[DependsOn( - typeof(AbpOssManagementApplicationContractsModule), - typeof(AbpAspNetCoreMvcModule))] -public class AbpOssManagementSettingManagementModule : AbpModule -{ - public override void PreConfigureServices(ServiceConfigurationContext context) - { - PreConfigure(mvcBuilder => - { - mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpOssManagementSettingManagementModule).Assembly); - }); - } -} +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobManagement.SettingManagement; + +[DependsOn( + typeof(AbpBlobManagementApplicationContractsModule), + typeof(AbpAspNetCoreMvcModule))] +public class AbpBlobManagementSettingManagementModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(mvcBuilder => + { + mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpBlobManagementSettingManagementModule).Assembly); + }); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingAppService.cs similarity index 56% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingAppService.cs index 133b808ba..7e9425a50 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingAppService.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingAppService.cs @@ -1,7 +1,7 @@ -using LINGYUN.Abp.OssManagement.Features; -using LINGYUN.Abp.OssManagement.Localization; -using LINGYUN.Abp.OssManagement.Permissions; -using LINGYUN.Abp.OssManagement.Settings; +using LINGYUN.Abp.BlobManagement.Features; +using LINGYUN.Abp.BlobManagement.Localization; +using LINGYUN.Abp.BlobManagement.Permissions; +using LINGYUN.Abp.BlobManagement.Settings; using LINGYUN.Abp.SettingManagement; using System.Threading.Tasks; using Volo.Abp.Application.Services; @@ -11,15 +11,15 @@ using Volo.Abp.SettingManagement; using Volo.Abp.Settings; using ValueType = LINGYUN.Abp.SettingManagement.ValueType; -namespace LINGYUN.Abp.OssManagement.SettingManagement; +namespace LINGYUN.Abp.BlobManagement.SettingManagement; -public class OssManagementSettingAppService : ApplicationService, IOssManagementSettingAppService +public class BlobManagementSettingAppService : ApplicationService, IBlobManagementSettingAppService { protected ISettingManager SettingManager { get; } protected IPermissionChecker PermissionChecker { get; } protected ISettingDefinitionManager SettingDefinitionManager { get; } - public OssManagementSettingAppService( + public BlobManagementSettingAppService( ISettingManager settingManager, IPermissionChecker permissionChecker, ISettingDefinitionManager settingDefinitionManager) @@ -27,7 +27,7 @@ public class OssManagementSettingAppService : ApplicationService, IOssManagement SettingManager = settingManager; PermissionChecker = permissionChecker; SettingDefinitionManager = settingDefinitionManager; - LocalizationResource = typeof(AbpOssManagementResource); + LocalizationResource = typeof(BlobManagementResource); } public async virtual Task GetAllForCurrentTenantAsync() @@ -40,27 +40,26 @@ public class OssManagementSettingAppService : ApplicationService, IOssManagement return await GetAllForProviderAsync(GlobalSettingValueProvider.ProviderName, null); } - protected async virtual Task GetAllForProviderAsync(string providerName, string providerKey) + protected async virtual Task GetAllForProviderAsync(string providerName, string? providerKey = null) { var settingGroups = new SettingGroupResult(); - // 无权限返回空结果,直接报错的话,网关聚合会抛出异常 - if (await FeatureChecker.IsEnabledAsync(AbpOssManagementFeatureNames.OssObject.Enable) && - await PermissionChecker.IsGrantedAsync(AbpOssManagementPermissions.OssObject.Default)) + if (await FeatureChecker.IsEnabledAsync(BlobManagementFeatureNames.Blob.Enable) && + await PermissionChecker.IsGrantedAsync(BlobManagementPermissionNames.Blob.Default)) { - var ossSettingGroup = new SettingGroupDto(L["DisplayName:OssManagement"], L["Description:OssManagement"]); + var ossSettingGroup = new SettingGroupDto(L["DisplayName:BlobManagement"], L["DisplayName:BlobManagement"]); - var ossObjectSetting = ossSettingGroup.AddSetting(L["DisplayName:OssObject"], L["Description:OssObject"]); + var ossObjectSetting = ossSettingGroup.AddSetting(L["DisplayName:Blobs"], L["DisplayName:Blobs"]); ossObjectSetting.AddDetail( - await SettingDefinitionManager.GetAsync(AbpOssManagementSettingNames.FileLimitLength), + await SettingDefinitionManager.GetAsync(BlobManagementSettingNames.FileLimitLength), StringLocalizerFactory, - await SettingManager.GetOrNullAsync(AbpOssManagementSettingNames.FileLimitLength, providerName, providerKey), + await SettingManager.GetOrNullAsync(BlobManagementSettingNames.FileLimitLength, providerName, providerKey), ValueType.Number); ossObjectSetting.AddDetail( - await SettingDefinitionManager.GetAsync(AbpOssManagementSettingNames.AllowFileExtensions), + await SettingDefinitionManager.GetAsync(BlobManagementSettingNames.AllowFileExtensions), StringLocalizerFactory, - await SettingManager.GetOrNullAsync(AbpOssManagementSettingNames.AllowFileExtensions, providerName, providerKey), + await SettingManager.GetOrNullAsync(BlobManagementSettingNames.AllowFileExtensions, providerName, providerKey), ValueType.String); settingGroups.AddGroup(ossSettingGroup); diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingController.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingController.cs new file mode 100644 index 000000000..899ecfa4d --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/BlobManagementSettingController.cs @@ -0,0 +1,34 @@ +using LINGYUN.Abp.SettingManagement; +using Microsoft.AspNetCore.Mvc; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.AspNetCore.Mvc; + +namespace LINGYUN.Abp.BlobManagement.SettingManagement; + +[RemoteService(Name = BlobManagementRemoteServiceConsts.RemoteServiceName)] +[Area("settingManagement")] +[Route("api/setting-management/blob-management")] +public class BlobManagementSettingController : AbpControllerBase, IBlobManagementSettingAppService +{ + private readonly IBlobManagementSettingAppService _service; + public BlobManagementSettingController( + IBlobManagementSettingAppService service) + { + _service = service; + } + + [HttpGet] + [Route("by-current-tenant")] + public virtual Task GetAllForCurrentTenantAsync() + { + return _service.GetAllForCurrentTenantAsync(); + } + + [HttpGet] + [Route("by-global")] + public virtual Task GetAllForGlobalAsync() + { + return _service.GetAllForGlobalAsync(); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/IBlobManagementSettingAppService.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/IBlobManagementSettingAppService.cs new file mode 100644 index 000000000..f7e76f441 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.SettingManagement/LINGYUN/Abp/BlobManagement/SettingManagement/IBlobManagementSettingAppService.cs @@ -0,0 +1,7 @@ +using LINGYUN.Abp.SettingManagement; + +namespace LINGYUN.Abp.BlobManagement.SettingManagement; + +public interface IBlobManagementSettingAppService : IReadonlySettingAppService +{ +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN.Abp.OssManagement.Tencent.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN.Abp.BlobManagement.Tencent.csproj similarity index 67% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN.Abp.OssManagement.Tencent.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN.Abp.BlobManagement.Tencent.csproj index e217a8978..1fd9ac67c 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN.Abp.OssManagement.Tencent.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN.Abp.BlobManagement.Tencent.csproj @@ -1,21 +1,22 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.Tencent - LINGYUN.Abp.OssManagement.Tencent - false - false - false - - - - - - - - - + + + + + + + net10.0 + LINGYUN.Abp.BlobManagement.Tencent + LINGYUN.Abp.BlobManagement.Tencent + false + false + false + enable + + + + + + + + + diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/AbpOssManagementTencentModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/AbpBlobManagementTencentModule.cs similarity index 50% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/AbpOssManagementTencentModule.cs rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/AbpBlobManagementTencentModule.cs index 937915dcf..158b9806a 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/AbpOssManagementTencentModule.cs +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/AbpBlobManagementTencentModule.cs @@ -5,33 +5,34 @@ using System; using Volo.Abp.BlobStoring; using Volo.Abp.Modularity; -namespace LINGYUN.Abp.OssManagement.Tencent; +namespace LINGYUN.Abp.BlobManagement.Tencent; [DependsOn( - typeof(AbpBlobStoringTencentCloudModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementTencentModule : AbpModule + typeof(AbpBlobManagementDomainModule), + typeof(AbpBlobStoringTencentCloudModule))] +public class AbpBlobManagementTencentModule : AbpModule { public override void ConfigureServices(ServiceConfigurationContext context) { var configuration = context.Services.GetConfiguration(); - var ossConfiguration = configuration.GetSection("OssManagement"); + var ossConfiguration = configuration.GetSection("BlobManagement"); var ossProvider = ossConfiguration["Provider"]; if (!ossProvider.IsNullOrWhiteSpace() && - "Tencent".Equals(ossProvider, StringComparison.InvariantCultureIgnoreCase)) + string.Equals(TencentBlobProvider.ProviderName, ossProvider, StringComparison.InvariantCultureIgnoreCase)) { Configure(options => { - options.Containers.ConfigureAll((containerName, containerConfiguration) => + options.Containers.Configure((containerConfiguration) => { containerConfiguration.UseTencentCloud(oss => { - ossConfiguration.GetSection("Tencent").Bind(oss); + ossConfiguration.GetSection(TencentBlobProvider.ProviderName).Bind(oss); }); }); }); - context.Services.AddTencentContainer(); + context.Services.AddTencentHttpClient(); + context.Services.AddTransient(); } } } diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/TencentBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/TencentBlobProvider.cs new file mode 100644 index 000000000..e17691b9c --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/LINGYUN/Abp/BlobManagement/Tencent/TencentBlobProvider.cs @@ -0,0 +1,216 @@ +using COSXML; +using COSXML.Model.Bucket; +using COSXML.Model.Object; +using COSXML.Model.Tag; +using LINGYUN.Abp.BlobStoring.Tencent; +using Microsoft.Extensions.Configuration; +using Microsoft.Extensions.DependencyInjection; +using System; +using System.IO; +using System.Net.Http; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp; +using Volo.Abp.BlobStoring; +using Volo.Abp.MultiTenancy; + +namespace LINGYUN.Abp.BlobManagement.Tencent; + +public class TencentBlobProvider : IBlobProvider +{ + public const string ProviderName = "TencentCloud"; + public string Name => ProviderName; + + protected IConfiguration Configuration { get; } + protected ICurrentTenant CurrentTenant { get; } + protected ICosClientFactory CosClientFactory { get; } + protected IHttpClientFactory HttpClientFactory { get; } + protected TencentBlobNamingNormalizer BlobNamingNormalizer { get; } + protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } + + public TencentBlobProvider( + IConfiguration configuration, + ICurrentTenant currentTenant, + ICosClientFactory cosClientFactory, + IHttpClientFactory httpClientFactory, + TencentBlobNamingNormalizer blobNamingNormalizer, + IBlobContainerConfigurationProvider configurationProvider) + { + Configuration = configuration; + CurrentTenant = currentTenant; + CosClientFactory = cosClientFactory; + HttpClientFactory = httpClientFactory; + BlobNamingNormalizer = blobNamingNormalizer; + ConfigurationProvider = configurationProvider; + } + + public async virtual Task CreateContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(name); + + CreateBucketIfNotExists(client, bucket); + } + + public async virtual Task DeleteContainerAsync( + string name, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(name); + + if (!BucketExists(client, bucket)) + { + return; + } + + client.DeleteBucket(new DeleteBucketRequest(bucket)); + } + + public async virtual Task DeleteBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (ObjectExists(client, bucket, objectName)) + { + client.DeleteObject(new DeleteObjectRequest(bucket, objectName)); + } + } + + public virtual Task DeleteFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // 腾讯云Oss没有目录的概念,新建对象时可以模拟目录 + return Task.CompletedTask; + } + + public async virtual Task DownloadBlobAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + if (!ObjectExists(client, bucket, objectName)) + { + return null; + } + + var configuration = await GetBlobConfiguration(); + var blobProviderConfig = Configuration.GetSection($"BlobManagement:{ProviderName}"); + + // See: https://cloud.tencent.com/document/product/436/47238 + var preSignatureStruct = new PreSignatureStruct + { + appid = configuration.AppId,//"1250000000"; //腾讯云账号 APPID + region = configuration.Region,//"COS_REGION"; //存储桶地域 + bucket = bucket,//"examplebucket-1250000000"; //存储桶 + key = objectName, //对象键 + httpMethod = "GET", //HTTP 请求方法 + isHttps = true, //生成 HTTPS 请求 URL + signDurationSecond = blobProviderConfig.GetValue("SignDurationSecond", 600), //请求签名时间 + headers = null, //签名中需要校验的 header + queryParameters = null //签名中需要校验的 URL 中请求参数 + }; + + var downloadUrl = client.GenerateSignURL(preSignatureStruct); + + var httpClient = HttpClientFactory.CreateTencentHttpClient(); + + return await httpClient.GetStreamAsync(downloadUrl, cancellationToken); + } + + public virtual Task CreateFolderAsync( + string containerName, + string blobName, + CancellationToken cancellationToken = default) + { + // 腾讯云Oss没有目录的概念,新建对象时可以模拟目录 + // https://cloud.tencent.com/document/product/436/13324 + return Task.CompletedTask; + } + + public async virtual Task UploadBlobAsync( + string containerName, + string blobName, + Stream content, + CancellationToken cancellationToken = default) + { + var client = await CreateClientAsync(); + var bucket = NormalizeContainerName(containerName); + var objectName = CalculateBlobName(blobName); + + CreateBucketIfNotExists(client, bucket); + + client.PutObject(new PutObjectRequest(bucket, objectName, content)); + } + + protected async virtual Task CreateClientAsync() + { + return await CosClientFactory.CreateAsync(); + } + + protected virtual void CreateBucketIfNotExists(CosXml cos, string bucket) + { + if (!cos.DoesBucketExist(new DoesBucketExistRequest(bucket))) + { + cos.PutBucket(new PutBucketRequest(bucket)); + } + } + + protected virtual bool BucketExists(CosXml cos, string bucket) + { + var request = new DoesBucketExistRequest(bucket); + return cos.DoesBucketExist(request); + } + + protected virtual bool ObjectExists(CosXml cos, string bucket, string objectName) + { + var request = new DoesObjectExistRequest(bucket, objectName); + return cos.DoesObjectExist(request); + } + + protected async virtual Task GetBlobConfiguration() + { + return await CosClientFactory.GetConfigurationAsync(); + } + + protected virtual string GetPrefixPath() + { + return CurrentTenant.Id == null + ? $"host/" + : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/"; + } + + protected virtual string NormalizeContainerName(string containerName) + { + if (!containerName.StartsWith("abp-")) + { + containerName = "abp-" + containerName; + } + return BlobNamingNormalizer.NormalizeContainerName(containerName); + } + + protected virtual string CalculateBlobName(string blobName) + { + var blobPath = GetPrefixPath(); + + if (!blobName.IsNullOrWhiteSpace()) + { + blobPath += blobName.RemovePreFix("/"); + } + + return BlobNamingNormalizer.NormalizeBlobName(blobPath); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentHttpClientFactoryServiceCollectionExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentHttpClientFactoryServiceCollectionExtensions.cs new file mode 100644 index 000000000..a57421e02 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentHttpClientFactoryServiceCollectionExtensions.cs @@ -0,0 +1,18 @@ +using System.Net.Http; + +namespace Microsoft.Extensions.DependencyInjection; +internal static class TencentHttpClientFactoryServiceCollectionExtensions +{ + private const string HttpClientName = "__BlobManagement_Tencent_Client"; + public static IServiceCollection AddTencentHttpClient(this IServiceCollection services) + { + services.AddHttpClient(HttpClientName); + + return services; + } + + public static HttpClient CreateTencentHttpClient(this IHttpClientFactory httpClientFactory) + { + return httpClientFactory.CreateClient(HttpClientName); + } +} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xml b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xml similarity index 100% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xml rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xml diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xsd b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN.Abp.BlobStoring.OssManagement.csproj b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN.Abp.BlobStoring.BlobManagement.csproj similarity index 65% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN.Abp.BlobStoring.OssManagement.csproj rename to aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN.Abp.BlobStoring.BlobManagement.csproj index acbdd37de..3f7b30d58 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN.Abp.BlobStoring.OssManagement.csproj +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN.Abp.BlobStoring.BlobManagement.csproj @@ -1,24 +1,25 @@ - - - - - - - netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 - LINGYUN.Abp.BlobStoring.OssManagement - LINGYUN.Abp.BlobStoring.OssManagement - false - false - false - - - - - - - - - - - - + + + + + + + netstandard2.0;netstandard2.1;net8.0;net9.0;net10.0 + LINGYUN.Abp.BlobStoring.BlobManagement + LINGYUN.Abp.BlobStoring.BlobManagement + false + false + false + enable + + + + + + + + + + + + diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/AbpBlobStoringBlobManagementModule.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/AbpBlobStoringBlobManagementModule.cs new file mode 100644 index 000000000..e2fe21cf6 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/AbpBlobStoringBlobManagementModule.cs @@ -0,0 +1,29 @@ +using LINGYUN.Abp.BlobManagement; +using Microsoft.Extensions.DependencyInjection; +using Volo.Abp.BlobStoring; +using Volo.Abp.Modularity; + +namespace LINGYUN.Abp.BlobStoring.BlobManagement; + +[DependsOn( + typeof(AbpBlobStoringModule), + typeof(AbpBlobManagementHttpApiClientModule))] +public class AbpBlobStoringBlobManagementModule : AbpModule +{ + public override void ConfigureServices(ServiceConfigurationContext context) + { + var configuration = context.Services.GetConfiguration(); + var ossConfiguration = configuration.GetSection("BlobManagement"); + + Configure(options => + { + options.Containers.ConfigureAll((containerName, containerConfiguration) => + { + if (!string.Equals("blob-management", containerName)) + { + containerConfiguration.UseBlobManagement(); + } + }); + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobContainerConfigurationExtensions.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobContainerConfigurationExtensions.cs new file mode 100644 index 000000000..07ddfd11b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobContainerConfigurationExtensions.cs @@ -0,0 +1,25 @@ +using System; +using Volo.Abp.BlobStoring; + +namespace LINGYUN.Abp.BlobStoring.BlobManagement; + +public static class BlobManagementBlobContainerConfigurationExtensions +{ + public static BlobManagementBlobProviderConfiguration GetBlobManagementConfiguration( + this BlobContainerConfiguration containerConfiguration) + { + return new BlobManagementBlobProviderConfiguration(containerConfiguration); + } + + public static BlobContainerConfiguration UseBlobManagement( + this BlobContainerConfiguration containerConfiguration, + Action? blobConfigureAction = null) + { + containerConfiguration.ProviderType = typeof(BlobManagementBlobProvider); + containerConfiguration.NamingNormalizers.TryAdd(); + + blobConfigureAction?.Invoke(new BlobManagementBlobProviderConfiguration(containerConfiguration)); + + return containerConfiguration; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobNamingNormalizer.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobNamingNormalizer.cs new file mode 100644 index 000000000..be2b3030b --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobNamingNormalizer.cs @@ -0,0 +1,17 @@ +using Volo.Abp.BlobStoring; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.BlobStoring.BlobManagement; + +public class BlobManagementBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency +{ + public virtual string NormalizeBlobName(string blobName) + { + return blobName; + } + + public virtual string NormalizeContainerName(string containerName) + { + return containerName; + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProvider.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProvider.cs new file mode 100644 index 000000000..54f5f306f --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProvider.cs @@ -0,0 +1,66 @@ +using LINGYUN.Abp.BlobManagement.Integration; +using LINGYUN.Abp.BlobManagement.Integration.Dtos; +using System.IO; +using System.Threading.Tasks; +using Volo.Abp.BlobStoring; +using Volo.Abp.Content; +using Volo.Abp.DependencyInjection; + +namespace LINGYUN.Abp.BlobStoring.BlobManagement; + +public class BlobManagementBlobProvider : BlobProviderBase, ITransientDependency +{ + private readonly IBlobIntegrationService _blobService; + public BlobManagementBlobProvider(IBlobIntegrationService blobService) + { + _blobService = blobService; + } + + public async override Task DeleteAsync(BlobProviderDeleteArgs args) + { + await _blobService.DeleteAsync( + new BlobFileGetByNameIntegrationDto + { + ContainerName = args.ContainerName, + BlobName = args.BlobName, + }); + + return true; + } + + public async override Task ExistsAsync(BlobProviderExistsArgs args) + { + return await _blobService.ExistsAsync( + new BlobFileGetByNameIntegrationDto + { + ContainerName = args.ContainerName, + BlobName = args.BlobName, + }); + } + + public async override Task GetOrNullAsync(BlobProviderGetArgs args) + { + var content = await _blobService.GetContentAsync( + new BlobFileGetByNameIntegrationDto + { + ContainerName = args.ContainerName, + BlobName = args.BlobName, + }); + + var stream = content.GetStream(); + + return stream == Stream.Null ? null : stream; + } + + public async override Task SaveAsync(BlobProviderSaveArgs args) + { + await _blobService.CreateAsync( + new BlobFileCreateIntegrationDto + { + ContainerName = args.ContainerName, + BlobName = args.BlobName, + Overwrite = args.OverrideExisting, + File = new RemoteStreamContent(args.BlobStream) + }); + } +} diff --git a/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProviderConfiguration.cs b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProviderConfiguration.cs new file mode 100644 index 000000000..8ed6c92c0 --- /dev/null +++ b/aspnet-core/modules/blob-management/LINGYUN.Abp.BlobStoring.BlobManagement/LINGYUN/Abp/BlobStoring/BlobManagement/BlobManagementBlobProviderConfiguration.cs @@ -0,0 +1,13 @@ +using Volo.Abp.BlobStoring; + +namespace LINGYUN.Abp.BlobStoring.BlobManagement; + +public class BlobManagementBlobProviderConfiguration +{ + private readonly BlobContainerConfiguration _containerConfiguration; + + public BlobManagementBlobProviderConfiguration(BlobContainerConfiguration containerConfiguration) + { + _containerConfiguration = containerConfiguration; + } +} diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/CacheRemoveKeysInput.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/CacheRemoveKeysInput.cs new file mode 100644 index 000000000..dae9e40e7 --- /dev/null +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/CacheRemoveKeysInput.cs @@ -0,0 +1,9 @@ +using System.ComponentModel.DataAnnotations; + +namespace LINGYUN.Abp.CachingManagement; + +public class CacheRemoveKeysInput +{ + [Required] + public string[] Keys { get; set; } +} diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/ICacheAppService.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/ICacheAppService.cs index f0c483c4b..88b2a3f8c 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/ICacheAppService.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/ICacheAppService.cs @@ -14,4 +14,6 @@ public interface ICacheAppService : IApplicationService Task RefreshAsync(CacheRefreshInput input); Task RemoveAsync(CacheKeyInput input); + + Task RemoveManyAsync(CacheRemoveKeysInput input); } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/en.json b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/en.json index bc4996b21..7628cc83b 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/en.json +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/en.json @@ -18,6 +18,9 @@ "DisplayName:Keys": "Keys", "DisplayName:AbsoluteExpiration": "Absolute Expiration", "DisplayName:SlidingExpiration": "Sliding Expiration", - "Abp.CachingManagement:01001": "A cache of Type {Type} does not support viewing key values." + "DisplayName:Prefix": "Prefix", + "Abp.CachingManagement:01001": "A cache of Type {Type} does not support viewing key values.", + "MultipleCacheWillBeDeletedMessage": "The selected cache will be deleted. Deleting the cache may have an impact on the system. Please proceed with caution!", + "EditCacheValueAlertMessage": "Modifying the cache directly may affect the system operation. Please proceed with caution!" } } \ No newline at end of file diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/zh-Hans.json index e5e2efbd8..3e2f01617 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application.Contracts/LINGYUN/Abp/CachingManagement/Localization/Resources/zh-Hans.json @@ -18,6 +18,9 @@ "DisplayName:Keys": "键列表", "DisplayName:AbsoluteExpiration": "绝对过期时间", "DisplayName:SlidingExpiration": "滑动过期时间", - "Abp.CachingManagement:01001": "类型为 {Type} 的缓存暂不支持查看键值." + "DisplayName:Prefix": "前缀", + "Abp.CachingManagement:01001": "类型为 {Type} 的缓存暂不支持查看键值.", + "MultipleCacheWillBeDeletedMessage": "选择的缓存将被删除, 删除缓存可能会对系统造成影响, 请谨慎操作!", + "EditCacheValueAlertMessage": "直接修改缓存可能会对系统运行造成影响,请谨慎操作!" } } \ No newline at end of file diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application/LINGYUN/Abp/CachingManagement/CacheAppService.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application/LINGYUN/Abp/CachingManagement/CacheAppService.cs index 0962312e3..d64ac28d1 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application/LINGYUN/Abp/CachingManagement/CacheAppService.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Application/LINGYUN/Abp/CachingManagement/CacheAppService.cs @@ -93,4 +93,10 @@ public class CacheAppService : ApplicationService, ICacheAppService { await CacheManager.RemoveAsync(input.Key); } + + [Authorize(CachingManagementPermissionNames.Cache.Delete)] + public async virtual Task RemoveManyAsync(CacheRemoveKeysInput input) + { + await CacheManager.RemoveAsync(input.Keys); + } } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManager.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManager.cs index 191fc96aa..bf5415485 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManager.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManager.cs @@ -1,5 +1,4 @@ -using System.Collections.Generic; -using System.Threading; +using System.Threading; using System.Threading.Tasks; namespace LINGYUN.Abp.CachingManagement; @@ -14,5 +13,5 @@ public interface ICacheManager Task RefreshAsync(RefreshCacheRequest request, CancellationToken cancellationToken = default); - Task RemoveAsync(string key, CancellationToken cancellationToken = default); + Task RemoveAsync(RemoveCacheRequest request, CancellationToken cancellationToken = default); } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManagerExtensions.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManagerExtensions.cs index 61bc6e8da..a31a97448 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManagerExtensions.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/ICacheManagerExtensions.cs @@ -42,4 +42,24 @@ public static class ICacheManagerExtensions new RefreshCacheRequest(key, absExpr, sldExpr), cancellationToken); } + + public static Task RemoveAsync( + this ICacheManager cacheManager, + string key, + CancellationToken cancellationToken = default) + { + return cacheManager.RemoveAsync( + new RemoveCacheRequest([key]), + cancellationToken); + } + + public static Task RemoveAsync( + this ICacheManager cacheManager, + string[] keys, + CancellationToken cancellationToken = default) + { + return cacheManager.RemoveAsync( + new RemoveCacheRequest(keys), + cancellationToken); + } } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/RemoveCacheRequest.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/RemoveCacheRequest.cs new file mode 100644 index 000000000..9ef620097 --- /dev/null +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.Domain/LINGYUN/Abp/CachingManagement/RemoveCacheRequest.cs @@ -0,0 +1,10 @@ +namespace LINGYUN.Abp.CachingManagement; + +public class RemoveCacheRequest +{ + public string[] Keys { get; } + public RemoveCacheRequest(string[] keys) + { + Keys = keys; + } +} diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.HttpApi/LINGYUN/Abp/CachingManagement/CacheController.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.HttpApi/LINGYUN/Abp/CachingManagement/CacheController.cs index b2b804209..b5307955b 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.HttpApi/LINGYUN/Abp/CachingManagement/CacheController.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.HttpApi/LINGYUN/Abp/CachingManagement/CacheController.cs @@ -61,4 +61,12 @@ public class CacheController : AbpControllerBase, ICacheAppService { return CacheAppService.RemoveAsync(input); } + + [HttpDelete] + [Route("bulk/remove")] + [Authorize(CachingManagementPermissionNames.Cache.Delete)] + public virtual Task RemoveManyAsync([FromBody] CacheRemoveKeysInput input) + { + return CacheAppService.RemoveManyAsync(input); + } } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisModule.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisModule.cs index 49b4f2562..f39f70a10 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisModule.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisModule.cs @@ -8,4 +8,8 @@ namespace LINGYUN.Abp.CachingManagement.StackExchangeRedis; typeof(AbpCachingStackExchangeRedisModule))] public class AbpCachingManagementStackExchangeRedisModule : AbpModule { + public override void ConfigureServices(ServiceConfigurationContext context) + { + Configure(context.Configuration.GetSection("CachingManagement:Redis")); + } } diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisOptions.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisOptions.cs new file mode 100644 index 000000000..06f24c392 --- /dev/null +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/AbpCachingManagementStackExchangeRedisOptions.cs @@ -0,0 +1,12 @@ +namespace LINGYUN.Abp.CachingManagement.StackExchangeRedis; + +public class AbpCachingManagementStackExchangeRedisOptions +{ + public int MaxScanDept { get; set; } + public int ScanCount { get; set; } + public AbpCachingManagementStackExchangeRedisOptions() + { + MaxScanDept = 20; + ScanCount = 10000; + } +} diff --git a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/StackExchangeRedisCacheManager.cs b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/StackExchangeRedisCacheManager.cs index e2516f100..06ccde457 100644 --- a/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/StackExchangeRedisCacheManager.cs +++ b/aspnet-core/modules/caching-management/LINGYUN.Abp.CachingManagement.StackExchangeRedis/LINGYUN/Abp/CachingManagement/StackExchangeRedis/StackExchangeRedisCacheManager.cs @@ -4,6 +4,8 @@ using Microsoft.Extensions.Options; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.Data; +using System.Linq; using System.Reflection; using System.Text; using System.Threading; @@ -13,37 +15,54 @@ using Volo.Abp.Caching; using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.DependencyInjection; using Volo.Abp.MultiTenancy; +using Volo.Abp.Timing; namespace LINGYUN.Abp.CachingManagement.StackExchangeRedis; [Dependency(ReplaceServices = true)] public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependency { + private readonly static string AbsoluteExpirationKey; + private readonly static string SlidingExpirationKey; + private readonly static MethodInfo ConnectAsyncMethod; + private readonly static MethodInfo MapMetadataMethod; + private readonly static RedisValue[] HashMembersAbsoluteExpirationSlidingExpiration; + protected AbpCachingManagementStackExchangeRedisOptions ManagementOptions { get; } protected RedisCacheOptions RedisCacheOptions { get; } protected AbpDistributedCacheOptions CacheOptions { get; } + protected IClock Clock { get; } protected ICurrentTenant CurrentTenant { get; } protected IDistributedCache DistributedCache { get; } protected AbpRedisCache RedisCache => DistributedCache.As(); static StackExchangeRedisCacheManager() { - var type = typeof(AbpRedisCache); + var type = typeof(RedisCache); ConnectAsyncMethod = type.GetMethod("ConnectAsync", BindingFlags.Instance | BindingFlags.NonPublic); + MapMetadataMethod = type.GetMethod("MapMetadata", BindingFlags.Instance | BindingFlags.NonPublic | BindingFlags.Static); + AbsoluteExpirationKey = type.GetField("AbsoluteExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.ToString()!; + SlidingExpirationKey = type.GetField("SlidingExpirationKey", BindingFlags.Static | BindingFlags.NonPublic)!.GetValue(null)!.ToString()!; + + HashMembersAbsoluteExpirationSlidingExpiration = [AbsoluteExpirationKey, SlidingExpirationKey]; } public StackExchangeRedisCacheManager( + IClock clock, ICurrentTenant currentTenant, IDistributedCache distributedCache, IOptions cacheOptions, - IOptions redisCacheOptions) + IOptions redisCacheOptions, + IOptions managementOptions) { + Clock = clock; CurrentTenant = currentTenant; DistributedCache = distributedCache;// distributedCache.As(); CacheOptions = cacheOptions.Value; RedisCacheOptions = redisCacheOptions.Value; + ManagementOptions = managementOptions.Value; } public async virtual Task GetKeysAsync(GetCacheKeysRequest request, CancellationToken cancellationToken = default) @@ -69,20 +88,16 @@ public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependenc { match += "c:*"; } - // abp*t:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*application* - // abp*c:application* - if (!CacheOptions.KeyPrefix.IsNullOrWhiteSpace()) - { - match += CacheOptions.KeyPrefix.EnsureEndsWith('*'); - } - // app*abp*t:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*application* // app*abp*c:*application* if (!request.Prefix.IsNullOrWhiteSpace()) { - match += request.Prefix.EnsureEndsWith('*') + match; + match += request.Prefix.EnsureEndsWith('*'); + } + else if (!CacheOptions.KeyPrefix.IsNullOrWhiteSpace()) + { + match += CacheOptions.KeyPrefix.EnsureEndsWith('*'); } - // if filter is Mailing: // app*abp*t:xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx*application*Mailing* // app*abp*c:*application*Mailing* @@ -93,24 +108,50 @@ public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependenc // scan 0 match * count 50000 // redis有自定义的key排序,由传递的marker来确定下一次检索起始位 - var args = new object[] { request.Marker ?? "0", "match", match, "count", 50000 }; + var nextCursor = request.Marker ?? "0"; + var scanKeys = new List(); - var result = await cache.ExecuteAsync("scan", args); + if (!request.Prefix.IsNullOrWhiteSpace() || !request.Filter.IsNullOrWhiteSpace()) + { + // 用户传递过滤条件时, 需要进行多次检索, 设定最大次数限制 + var dept = 1; + do + { + if (dept > ManagementOptions.MaxScanDept) + { + break; + } + + var scanArgs = new object[] { nextCursor, "MATCH", match, "COUNT", ManagementOptions.ScanCount }; + var scanResult = await cache.ExecuteAsync("SCAN", scanArgs); + + var results = (RedisResult[])scanResult; + nextCursor = (string)results[0]; + scanKeys.AddRange((string[])results[1]); + + dept++; + } while (nextCursor != "0"); + } + else + { + var scanArgs = new object[] { nextCursor, "MATCH", match, "COUNT", ManagementOptions.ScanCount }; + var scanResult = await cache.ExecuteAsync("SCAN", scanArgs); + var results = (RedisResult[])scanResult; - var results = (RedisResult[])result; + // 第一个返回结果 下一次检索起始位 0复位 + // 第二个返回结果为key列表 + // https://redis.io/commands/scan/ + nextCursor = (string)results[0]; + scanKeys.AddRange((string[])results[1]); + } - // 第一个返回结果 下一次检索起始位 0复位 - // 第二个返回结果为key列表 - // https://redis.io/commands/scan/ return new CackeKeysResponse( - (string)results[0], - (string[])results[1]); + nextCursor, + scanKeys); } public async virtual Task GetValueAsync(string key, CancellationToken cancellationToken = default) { - await ConnectAsync(cancellationToken); - long size = 0; var values = new Dictionary(); @@ -175,14 +216,16 @@ public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependenc cacheKey = cacheKey.Substring(RedisCacheOptions.InstanceName.Length); } + var distributedCacheEntryOptions = await BuildDistributedCacheEntryOptions( + request.Key, + request.SlidingExpiration, + request.AbsoluteExpiration, + cancellationToken); + await RedisCache.SetAsync( cacheKey, Encoding.UTF8.GetBytes(request.Value), - new DistributedCacheEntryOptions - { - SlidingExpiration = request.SlidingExpiration, - AbsoluteExpirationRelativeToNow = request.AbsoluteExpiration, - }, + distributedCacheEntryOptions, cancellationToken); } @@ -197,14 +240,16 @@ public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependenc { var value = await RedisCache.GetAsync(cacheKey, cancellationToken); + var distributedCacheEntryOptions = await BuildDistributedCacheEntryOptions( + request.Key, + request.SlidingExpiration, + request.AbsoluteExpiration, + cancellationToken); + await RedisCache.SetAsync( cacheKey, - value, - new DistributedCacheEntryOptions - { - SlidingExpiration = request.SlidingExpiration, - AbsoluteExpirationRelativeToNow = request.AbsoluteExpiration, - }, + value, + distributedCacheEntryOptions, cancellationToken); return; @@ -212,18 +257,68 @@ public class StackExchangeRedisCacheManager : ICacheManager, ISingletonDependenc await RedisCache.RefreshAsync(cacheKey, cancellationToken); } - public async virtual Task RemoveAsync(string key, CancellationToken cancellationToken = default) + public async virtual Task RemoveAsync(RemoveCacheRequest request, CancellationToken cancellationToken = default) { - var cacheKey = key; - if (!RedisCacheOptions.InstanceName.IsNullOrWhiteSpace() && cacheKey.StartsWith(RedisCacheOptions.InstanceName)) + var cacheKeys = request.Keys.Select((cacheKey) => { - cacheKey = cacheKey.Substring(RedisCacheOptions.InstanceName.Length); - } - await RedisCache.RemoveAsync(cacheKey, cancellationToken); + if (!RedisCacheOptions.InstanceName.IsNullOrWhiteSpace() && cacheKey.StartsWith(RedisCacheOptions.InstanceName)) + { + return cacheKey.Substring(RedisCacheOptions.InstanceName.Length); + } + return cacheKey; + }); + await RedisCache.RemoveManyAsync(cacheKeys, cancellationToken); } protected virtual ValueTask ConnectAsync(CancellationToken token = default) { return (ValueTask)ConnectAsyncMethod.Invoke(RedisCache, new object[] { token }); } + + protected virtual void MapMetadata(RedisValue[] results, out DateTimeOffset? absoluteExpiration, out TimeSpan? slidingExpiration) + { + var parameters = new object[] { results, null, null }; + MapMetadataMethod.Invoke(this, parameters); + + absoluteExpiration = (DateTimeOffset?)parameters[1]; + slidingExpiration = (TimeSpan?)parameters[2]; + } + + protected async virtual Task BuildDistributedCacheEntryOptions( + string key, + TimeSpan? sldexp, + TimeSpan? absexp, + CancellationToken cancellationToken = default) + { + if (!sldexp.HasValue || !absexp.HasValue) + { + var cache = await ConnectAsync(cancellationToken); + + var redisValue = await cache.HashGetAsync(key, HashMembersAbsoluteExpirationSlidingExpiration); + MapMetadata(redisValue, out var absoluteExpiration, out var slidingExpiration); + if (absoluteExpiration.HasValue) + { + absexp ??= absoluteExpiration.Value - Clock.Now; + } + if (slidingExpiration.HasValue) + { + sldexp ??= slidingExpiration; + } + } + + // Microsoft.Extensions.Caching.StackExchangeRedis.RedisCache + // L580-L583: 键过期时间取自滑动过期时间与绝对过期时间的最小值, 这里为了防止前端显示问题, 强制滑动过期时间不小于绝对过期时间... + // (long)Math.Min((absoluteExpiration.Value - creationTime).TotalSeconds, options.SlidingExpiration.Value.TotalSeconds); + + if (sldexp < absexp) + { + sldexp = absexp; + } + + return new DistributedCacheEntryOptions + { + SlidingExpiration = sldexp, + AbsoluteExpirationRelativeToNow = absexp, + }; + } } diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj index 5432ef837..0f9009a45 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.csproj @@ -1,4 +1,4 @@ - + @@ -22,13 +22,14 @@ - - + + + diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/AbpElsaEntityFrameworkCoreMySqlModule.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/AbpElsaEntityFrameworkCoreMySqlModule.cs index 8f0576a13..d015d4a46 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/AbpElsaEntityFrameworkCoreMySqlModule.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/AbpElsaEntityFrameworkCoreMySqlModule.cs @@ -1,11 +1,11 @@ using Elsa; using Elsa.Options; using LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql.Migrations; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using System.Threading.Tasks; using Volo.Abp; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.Modularity; using Volo.Abp.VirtualFileSystem; @@ -13,7 +13,7 @@ namespace LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql; [DependsOn( typeof(AbpElsaEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule))] + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule))] public class AbpElsaEntityFrameworkCoreMySqlModule : AbpModule { public override void PreConfigureServices(ServiceConfigurationContext context) diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/PersistenceStartup.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/PersistenceStartup.cs index a0dab5bd1..a7a21f799 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/PersistenceStartup.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/PersistenceStartup.cs @@ -1,5 +1,4 @@ using Elsa.Attributes; -using Elsa.Persistence.EntityFramework.MySql; using Microsoft.EntityFrameworkCore; namespace LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql; @@ -11,11 +10,9 @@ public class PersistenceStartup : PersistenceStartupBase protected override void Configure(DbContextOptionsBuilder options, string connectionString) { -#pragma warning disable CS0618 options.UseMySql( connectionString, ServerVersion.AutoDetect(connectionString), - mysql => mysql.TranslateParameterizedCollectionsToConstants()); -#pragma warning restore CS0618 + mysql => mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant)); } } diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WebhooksStartup.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WebhooksStartup.cs index 55751e40a..5a7ecc76b 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WebhooksStartup.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WebhooksStartup.cs @@ -10,12 +10,10 @@ public class WebhooksStartup : WebhooksStartupBase protected override void Configure(DbContextOptionsBuilder options, string connectionString) { -#pragma warning disable CS0618 options.UseMySql( connectionString, ServerVersion.AutoDetect(connectionString), mysql => mysql.MigrationsHistoryTable("__EFMigrationsHistory_Webhooks") - .TranslateParameterizedCollectionsToConstants()); -#pragma warning restore CS0618 + .UseParameterizedCollectionMode(ParameterTranslationMode.Constant)); } } diff --git a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WorkflowSettingsStartup.cs b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WorkflowSettingsStartup.cs index 60b78821d..ca4662c73 100644 --- a/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WorkflowSettingsStartup.cs +++ b/aspnet-core/modules/elsa/LINGYUN.Abp.Elsa.EntityFrameworkCore.MySql/LINGYUN/Abp/Elsa/EntityFrameworkCore/MySql/WorkflowSettingsStartup.cs @@ -10,12 +10,10 @@ public class WorkflowSettingsStartup : WorkflowSettingsStartupBase protected override void Configure(DbContextOptionsBuilder options, string connectionString) { -#pragma warning disable CS0618 options.UseMySql( connectionString, ServerVersion.AutoDetect(connectionString), mysql => mysql.MigrationsHistoryTable("__EFMigrationsHistory_WorkflowSettings") - .TranslateParameterizedCollectionsToConstants()); -#pragma warning restore CS0618 + .UseParameterizedCollectionMode(ParameterTranslationMode.Constant)); } } diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Definitions/IFeatureDefinitionAppService.cs b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Definitions/IFeatureDefinitionAppService.cs index 4d56f7b1c..80e222f6f 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Definitions/IFeatureDefinitionAppService.cs +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Definitions/IFeatureDefinitionAppService.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -15,4 +16,6 @@ public interface IFeatureDefinitionAppService : IApplicationService Task UpdateAsync(string name, FeatureDefinitionUpdateDto input); Task> GetListAsync(FeatureDefinitionGetListInput input); + + Task>> GetAssignableProvidersAsync(); } diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/en.json b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/en.json index 348c42b54..7e38a1599 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/en.json +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/en.json @@ -25,6 +25,8 @@ "Description:IsVisibleToClients": "Can clients see this feature and it's value.", "DisplayName:IsAvailableToHost": "Available To Host", "Description:IsAvailableToHost": "Can host use this feature.", + "DisplayName:AllowedProviders": "Allowed Providers", + "Description:AllowedProviders": "A list of allowed providers to get/set value of this feature.An empty list indicates that all providers are allowed.", "DisplayName:IsStatic": "Static", "GroupDefinitions": "Group Definitions", "GroupDefinitions:AddNew": "Add Group", @@ -33,6 +35,11 @@ "BasicInfo": "Basic", "Properties": "Properties", "ValueValidator": "Value Validator", - "ItemWillBeDeleteOrRestoreMessage": "If you have changed the Features, you will revert to the default Features. Otherwise, the custom Features are removed." + "ItemWillBeDeleteOrRestoreMessage": "If you have changed the Features, you will revert to the default Features. Otherwise, the custom Features are removed.", + "FeatureProviders:C": "Configuration", + "FeatureProviders:D": "Default", + "FeatureProviders:E": "Edition", + "FeatureProviders:T": "Tenant", + "FeatureProviders:CT": "Client" } } \ No newline at end of file diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/zh-Hans.json b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/zh-Hans.json index 84f84629b..834d2baa0 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/zh-Hans.json +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application.Contracts/LINGYUN/Abp/FeatureManagement/Localization/Application/Contracts/zh-Hans.json @@ -25,6 +25,8 @@ "Description:IsVisibleToClients": "客户端是否可以看到这个功能.", "DisplayName:IsAvailableToHost": "宿主可用功能", "Description:IsAvailableToHost": "宿主端是否可以使用此功能.", + "DisplayName:AllowedProviders": "功能提供者", + "Description:AllowedProviders": "允许获取/设置此功能值的提供者列表, 若为空列表,则表示所有提供者均被允许.", "DisplayName:IsStatic": "静态", "GroupDefinitions": "分组定义", "GroupDefinitions:AddNew": "添加分组", @@ -33,6 +35,11 @@ "BasicInfo": "基本信息", "Properties": "属性", "ValueValidator": "值验证", - "ItemWillBeDeleteOrRestoreMessage": "如果已改变功能, 将还原到默认功能项。否则会删除自定义功能." + "ItemWillBeDeleteOrRestoreMessage": "如果已改变功能, 将还原到默认功能项。否则会删除自定义功能.", + "FeatureProviders:C": "配置", + "FeatureProviders:D": "默认", + "FeatureProviders:E": "版本", + "FeatureProviders:T": "租户", + "FeatureProviders:CT": "客户端" } } \ No newline at end of file diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs index 852db209e..fdae9137d 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.Application/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionAppService.cs @@ -24,6 +24,7 @@ public class FeatureDefinitionAppService : FeatureManagementAppServiceBase, IFea private readonly StringValueTypeSerializer _stringValueTypeSerializer; private readonly ILocalizableStringSerializer _localizableStringSerializer; private readonly IFeatureDefinitionManager _featureDefinitionManager; + private readonly IFeatureValueProviderManager _featureValueProviderManager; private readonly IStaticFeatureDefinitionStore _staticFeatureDefinitionStore; private readonly IDynamicFeatureDefinitionStore _dynamicFeatureDefinitionStore; private readonly IFeatureDefinitionRecordRepository _definitionRepository; @@ -33,6 +34,7 @@ public class FeatureDefinitionAppService : FeatureManagementAppServiceBase, IFea StringValueTypeSerializer stringValueTypeSerializer, ILocalizableStringSerializer localizableStringSerializer, IFeatureDefinitionManager featureDefinitionManager, + IFeatureValueProviderManager featureValueProviderManager, IStaticFeatureDefinitionStore featureDefinitionStore, IDynamicFeatureDefinitionStore dynamicFeatureDefinitionStore, IFeatureDefinitionRecordRepository definitionRepository, @@ -41,12 +43,30 @@ public class FeatureDefinitionAppService : FeatureManagementAppServiceBase, IFea _stringValueTypeSerializer = stringValueTypeSerializer; _localizableStringSerializer = localizableStringSerializer; _featureDefinitionManager = featureDefinitionManager; + _featureValueProviderManager = featureValueProviderManager; _staticFeatureDefinitionStore = featureDefinitionStore; _dynamicFeatureDefinitionStore = dynamicFeatureDefinitionStore; _definitionRepository = definitionRepository; _definitionBasicRepository = definitionBasicRepository; } + public virtual Task>> GetAssignableProvidersAsync() + { + var providerNames = _featureValueProviderManager.ValueProviders.Select(x => x.Name); + + return Task.FromResult(new ListResultDto>( + providerNames.Select(name => + { + var provider = new NameValue(name, name); + var displayName = L[$"FeatureProviders:{name}"]; + if (!displayName.ResourceNotFound) + { + provider.Name = displayName.Value; + } + return provider; + }).ToList())); + } + [Authorize(FeatureManagementPermissionNames.Definition.Create)] public async virtual Task CreateAsync(FeatureDefinitionCreateDto input) { diff --git a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.HttpApi/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionController.cs b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.HttpApi/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionController.cs index 45bddf5bc..e2001779c 100644 --- a/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.HttpApi/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionController.cs +++ b/aspnet-core/modules/feature-management/LINGYUN.Abp.FeatureManagement.HttpApi/LINGYUN/Abp/FeatureManagement/Definitions/FeatureDefinitionController.cs @@ -23,6 +23,13 @@ public class FeatureDefinitionController : FeatureManagementControllerBase, IFea _service = service; } + [HttpGet] + [Route("assignable-providers")] + public virtual Task>> GetAssignableProvidersAsync() + { + return _service.GetAssignableProvidersAsync(); + } + [HttpPost] [Authorize(FeatureManagementPermissionNames.Definition.Create)] public virtual Task CreateAsync(FeatureDefinitionCreateDto input) diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application.Contracts/LINGYUN/Abp/Identity/Dto/OrganizationUnitGetChildrenDto.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application.Contracts/LINGYUN/Abp/Identity/Dto/OrganizationUnitGetChildrenDto.cs index 3b5039eda..798162bd4 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application.Contracts/LINGYUN/Abp/Identity/Dto/OrganizationUnitGetChildrenDto.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Application.Contracts/LINGYUN/Abp/Identity/Dto/OrganizationUnitGetChildrenDto.cs @@ -1,12 +1,9 @@ using System; -using System.ComponentModel.DataAnnotations; using Volo.Abp.Application.Dtos; namespace LINGYUN.Abp.Identity; -public class OrganizationUnitGetChildrenDto : IEntityDto +public class OrganizationUnitGetChildrenDto : EntityDto { - [Required] - public Guid Id { get; set; } public bool Recursive { get; set; } } diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore.QrCode/FodyWeavers.xml b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore.QrCode/FodyWeavers.xml index 00e1d9a1c..1715698cc 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore.QrCode/FodyWeavers.xml +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore.QrCode/FodyWeavers.xml @@ -1,3 +1,3 @@ - - + + \ No newline at end of file diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xml b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xml new file mode 100644 index 000000000..1715698cc --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xml @@ -0,0 +1,3 @@ + + + \ No newline at end of file diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xsd b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xsd new file mode 100644 index 000000000..3f3946e28 --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/FodyWeavers.xsd @@ -0,0 +1,30 @@ + + + + + + + + + + + + + + + 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. + + + + + A comma-separated list of error codes that can be safely ignored in assembly verification. + + + + + 'false' to turn off automatic generation of the XML Schema file. + + + + + \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN.Abp.Identity.AspNetCore.csproj similarity index 64% rename from aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj rename to aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN.Abp.Identity.AspNetCore.csproj index b5428fed1..f9e2ef1b2 100644 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN.Abp.OssManagement.Imaging.csproj +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN.Abp.Identity.AspNetCore.csproj @@ -5,8 +5,8 @@ net10.0 - LINGYUN.Abp.OssManagement.Imaging - LINGYUN.Abp.OssManagement.Imaging + LINGYUN.Abp.Identity.AspNetCore + LINGYUN.Abp.Identity.AspNetCore false false false @@ -14,11 +14,10 @@ - + - + - diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs new file mode 100644 index 000000000..eb0b80d58 --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpIdentityAspNetCoreModule.cs @@ -0,0 +1,18 @@ +using Microsoft.AspNetCore.Identity; +using Volo.Abp.Modularity; + +using VoloAbpIdentityAspNetCoreModule = Volo.Abp.Identity.AspNetCore.AbpIdentityAspNetCoreModule; + +namespace LINGYUN.Abp.Identity.AspNetCore; + +[DependsOn(typeof(VoloAbpIdentityAspNetCoreModule))] +public class AbpIdentityAspNetCoreModule : AbpModule +{ + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(builder => + { + builder.AddTokenProvider(AbpPhoneNumberRegisterTokenProvider.ProviderName); + }); + } +} diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpPhoneNumberRegisterTokenProvider.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpPhoneNumberRegisterTokenProvider.cs new file mode 100644 index 000000000..f37ee5319 --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/AbpPhoneNumberRegisterTokenProvider.cs @@ -0,0 +1,15 @@ +using Microsoft.AspNetCore.Identity; +using System.Threading.Tasks; +using IdentityUser = Volo.Abp.Identity.IdentityUser; + +namespace LINGYUN.Abp.Identity.AspNetCore; + +public class AbpPhoneNumberRegisterTokenProvider : TotpSecurityStampBasedTokenProvider +{ + public const string ProviderName = UserTwoFactorTokenProviderConsts.PhoneNumberRegisterTokenProvider; + + public override Task CanGenerateTwoFactorTokenAsync(UserManager manager, IdentityUser user) + { + return Task.FromResult(user.IsPhoneNumberRegisterUser()); + } +} diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/DefaultTotpService.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/TotpService.cs similarity index 50% rename from aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/DefaultTotpService.cs rename to aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/TotpService.cs index 60f3f0cbf..6c6b38c89 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/DefaultTotpService.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.AspNetCore/LINGYUN/Abp/Identity/AspNetCore/TotpService.cs @@ -3,66 +3,73 @@ using System.Diagnostics; using System.Net; using System.Security.Cryptography; using System.Text; -using Volo.Abp.DependencyInjection; -namespace LINGYUN.Abp.Identity.Security; +namespace LINGYUN.Abp.Identity.AspNetCore; /// -/// 微软的实现 -/// See: Microsoft.AspNetCore.Identity.Rfc6238AuthenticationService +/// 参考 +/// Microsoft: https://github.com/dotnet/dotnet/blob/main/src/aspnetcore/src/Identity/Extensions.Core/src/Rfc6238AuthenticationService.cs /// -internal class DefaultTotpService : ITotpService, ISingletonDependency +#nullable enable +internal class TotpService { private static readonly TimeSpan _timestep = TimeSpan.FromMinutes(3); private static readonly Encoding _encoding = new UTF8Encoding(false, true); -#if NETSTANDARD2_0 +#if NETSTANDARD2_0 || NETFRAMEWORK private static readonly DateTime _unixEpoch = new DateTime(1970, 1, 1, 0, 0, 0, DateTimeKind.Utc); - private static readonly RandomNumberGenerator _rng = RandomNumberGenerator.Create(); #endif - // Generates a new 80-bit security token - public static byte[] GenerateRandomKey() - { - byte[] bytes = new byte[20]; -#if NETSTANDARD2_0 - _rng.GetBytes(bytes); + internal static int ComputeTotp( +#if NET6_0_OR_GREATER + byte[] key, #else - RandomNumberGenerator.Fill(bytes); + HashAlgorithm hashAlgorithm, #endif - return bytes; - } - - internal static int ComputeTotp(HashAlgorithm hashAlgorithm, ulong timestepNumber, string modifier) + ulong timestepNumber, + byte[]? modifierBytes) { // # of 0's = length of pin const int Mod = 1000000; // See https://tools.ietf.org/html/rfc4226 // We can add an optional modifier +#if NET6_0_OR_GREATER + Span timestepAsBytes = stackalloc byte[sizeof(long)]; + var res = BitConverter.TryWriteBytes(timestepAsBytes, IPAddress.HostToNetworkOrder((long)timestepNumber)); + Debug.Assert(res); +#else var timestepAsBytes = BitConverter.GetBytes(IPAddress.HostToNetworkOrder((long)timestepNumber)); - var hash = hashAlgorithm.ComputeHash(ApplyModifier(timestepAsBytes, modifier)); +#endif + +#if NET6_0_OR_GREATER + Span modifierCombinedBytes = timestepAsBytes; + if (modifierBytes is not null) + { + modifierCombinedBytes = ApplyModifier(timestepAsBytes, modifierBytes); + } + Span hash = stackalloc byte[HMACSHA1.HashSizeInBytes]; + res = HMACSHA1.TryHashData(key, modifierCombinedBytes, hash, out var written); + Debug.Assert(res); + Debug.Assert(written == hash.Length); +#else + var hash = hashAlgorithm.ComputeHash(ApplyModifier(timestepAsBytes, modifierBytes)); +#endif // Generate DT string var offset = hash[hash.Length - 1] & 0xf; Debug.Assert(offset + 4 < hash.Length); var binaryCode = (hash[offset] & 0x7f) << 24 - | (hash[offset + 1] & 0xff) << 16 - | (hash[offset + 2] & 0xff) << 8 - | (hash[offset + 3] & 0xff); + | (hash[offset + 1] & 0xff) << 16 + | (hash[offset + 2] & 0xff) << 8 + | (hash[offset + 3] & 0xff); return binaryCode % Mod; } - private static byte[] ApplyModifier(byte[] input, string modifier) + private static byte[] ApplyModifier(Span input, byte[] modifierBytes) { - if (String.IsNullOrEmpty(modifier)) - { - return input; - } - - var modifierBytes = _encoding.GetBytes(modifier); var combined = new byte[checked(input.Length + modifierBytes.Length)]; - Buffer.BlockCopy(input, 0, combined, 0, input.Length); + input.CopyTo(combined); Buffer.BlockCopy(modifierBytes, 0, combined, input.Length, modifierBytes.Length); return combined; } @@ -70,7 +77,7 @@ internal class DefaultTotpService : ITotpService, ISingletonDependency // More info: https://tools.ietf.org/html/rfc6238#section-4 private static ulong GetCurrentTimeStepNumber() { -#if NETSTANDARD2_0 +#if NETSTANDARD2_0 || NETFRAMEWORK var delta = DateTime.UtcNow - _unixEpoch; #else var delta = DateTimeOffset.UtcNow - DateTimeOffset.UnixEpoch; @@ -78,35 +85,43 @@ internal class DefaultTotpService : ITotpService, ISingletonDependency return (ulong)(delta.Ticks / _timestep.Ticks); } - public int GenerateCode(byte[] securityToken, string modifier = null) + public static int GenerateCode(byte[] securityToken, string? modifier = null) { - if (securityToken == null) - { - throw new ArgumentNullException(nameof(securityToken)); - } + ArgumentNullException.ThrowIfNull(securityToken); // Allow a variance of no greater than 9 minutes in either direction var currentTimeStep = GetCurrentTimeStepNumber(); + + var modifierBytes = modifier is not null ? _encoding.GetBytes(modifier) : null; +#if NET6_0_OR_GREATER + return ComputeTotp(securityToken, currentTimeStep, modifierBytes); +#else using (var hashAlgorithm = new HMACSHA1(securityToken)) { - return ComputeTotp(hashAlgorithm, currentTimeStep, modifier); + return ComputeTotp(hashAlgorithm, currentTimeStep, modifierBytes); } +#endif } - public bool ValidateCode(byte[] securityToken, int code, string modifier = null) + public static bool ValidateCode(byte[] securityToken, int code, string? modifier = null) { - if (securityToken == null) - { - throw new ArgumentNullException(nameof(securityToken)); - } + ArgumentNullException.ThrowIfNull(securityToken); // Allow a variance of no greater than 9 minutes in either direction var currentTimeStep = GetCurrentTimeStepNumber(); + +#if !NET6_0_OR_GREATER using (var hashAlgorithm = new HMACSHA1(securityToken)) +#endif { + var modifierBytes = modifier is not null ? _encoding.GetBytes(modifier) : null; for (var i = -2; i <= 2; i++) { - var computedTotp = ComputeTotp(hashAlgorithm, (ulong)((long)currentTimeStep + i), modifier); +#if NET6_0_OR_GREATER + var computedTotp = ComputeTotp(securityToken, (ulong)((long)currentTimeStep + i), modifierBytes); +#else + var computedTotp = ComputeTotp(hashAlgorithm, (ulong)((long)currentTimeStep + i), modifierBytes); +#endif if (computedTotp == code) { return true; @@ -118,3 +133,5 @@ internal class DefaultTotpService : ITotpService, ISingletonDependency return false; } } + +#nullable disable diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/AbpIdentityDomainModule.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/AbpIdentityDomainModule.cs index 51143849a..9f0c8a58b 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/AbpIdentityDomainModule.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/AbpIdentityDomainModule.cs @@ -1,4 +1,5 @@ using LINGYUN.Abp.Identity.Session; +using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.Options; using System.Threading.Tasks; @@ -18,6 +19,14 @@ namespace LINGYUN.Abp.Identity; typeof(Volo.Abp.Identity.AbpIdentityDomainModule))] public class AbpIdentityDomainModule : AbpModule { + public override void PreConfigureServices(ServiceConfigurationContext context) + { + PreConfigure(builder => + { + builder.AddUserValidator(); + }); + } + public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddMapperlyObjectMapper(); diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/IdentityUserPhoneNumberRegisterExtenssions.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/IdentityUserPhoneNumberRegisterExtenssions.cs new file mode 100644 index 000000000..e11a928bf --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/IdentityUserPhoneNumberRegisterExtenssions.cs @@ -0,0 +1,17 @@ +using Volo.Abp.Data; +using Volo.Abp.Identity; + +namespace LINGYUN.Abp.Identity; + +public static class IdentityUserPhoneNumberRegisterExtenssions +{ + public static bool IsPhoneNumberRegisterUser(this IdentityUser user) + { + return user.GetProperty(UserTwoFactorTokenProviderConsts.PhoneNumberRegisterTokenProvider, false); + } + + public static void SetPhoneNumberRegisterUser(this IdentityUser user) + { + user.SetProperty(UserTwoFactorTokenProviderConsts.PhoneNumberRegisterTokenProvider, true); + } +} diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/ITotpService.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/ITotpService.cs deleted file mode 100644 index 3b124616d..000000000 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/Security/ITotpService.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace LINGYUN.Abp.Identity.Security; - -/// -/// totp算法服务 -/// -public interface ITotpService -{ - int GenerateCode(byte[] securityToken, string modifier = null); - - bool ValidateCode(byte[] securityToken, int code, string modifier = null); -} diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/SecurityTokenCacheItem.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/SecurityTokenCacheItem.cs index eaf5bb57f..16377c9fa 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/SecurityTokenCacheItem.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/SecurityTokenCacheItem.cs @@ -1,4 +1,6 @@ -namespace LINGYUN.Abp.Identity; +using System; + +namespace LINGYUN.Abp.Identity; /// /// 安全令牌验证缓存 @@ -10,6 +12,10 @@ public class SecurityTokenCacheItem /// public string Token { get; set; } /// + /// 用于验证的用户Id + /// + public Guid UserId { get; set; } + /// /// 用于验证的安全令牌 /// public string SecurityToken { get; set; } @@ -19,9 +25,10 @@ public class SecurityTokenCacheItem } - public SecurityTokenCacheItem(string token, string securityToken) + public SecurityTokenCacheItem(string token, Guid userId, string securityToken) { Token = token; + UserId = userId; SecurityToken = securityToken; } diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/UserTwoFactorTokenProviderConsts.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/UserTwoFactorTokenProviderConsts.cs new file mode 100644 index 000000000..b2f4ab459 --- /dev/null +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/LINGYUN/Abp/Identity/UserTwoFactorTokenProviderConsts.cs @@ -0,0 +1,10 @@ +namespace LINGYUN.Abp.Identity; + +public static class UserTwoFactorTokenProviderConsts +{ + public const string PhoneNumberRegisterTokenProvider = "PhoneNumberRegister"; + + public const string PhoneNumberRegisterPurpose = "PhoneNumberRegister"; + + public const string PhoneResetPasswordPurpose = "PhoneResetPassword"; +} diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/IdentityUserManagerExtensions.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/IdentityUserManagerExtensions.cs index 6b380a891..3daaeea57 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/IdentityUserManagerExtensions.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/IdentityUserManagerExtensions.cs @@ -1,9 +1,11 @@ using JetBrains.Annotations; -using LINGYUN.Abp.Identity; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Localization; using System.Threading.Tasks; using Volo.Abp; using Volo.Abp.Data; using Volo.Abp.Identity; +using Volo.Abp.Identity.Localization; namespace Microsoft.AspNetCore.Identity; @@ -26,14 +28,17 @@ public static class IdentityUserManagerExtensions // 如果其中一个安全选项未确认,无法启用双因素验证 if (!hasAuthenticatorEnabled && !phoneNumberConfirmed && !emailAddressConfirmed) { + var localizer = userManager.ServiceProvider.GetRequiredService>(); - // TODO: 返回标准的 IdentityResult - //var error = new IdentityError(); - //return IdentityResult.Failed(error); + //throw new IdentityException( + // LINGYUN.Abp.Identity.IdentityErrorCodes.ChangeTwoFactorWithMFANotBound, + // details: phoneNumberConfirmed ? "phone number not confirmed" : "email address not confirmed"); - throw new IdentityException( - LINGYUN.Abp.Identity.IdentityErrorCodes.ChangeTwoFactorWithMFANotBound, - details: phoneNumberConfirmed ? "phone number not confirmed" : "email address not confirmed"); + return IdentityResult.Failed(new IdentityError + { + Code = LINGYUN.Abp.Identity.IdentityErrorCodes.ChangeTwoFactorWithMFANotBound, + Description = localizer[LINGYUN.Abp.Identity.IdentityErrorCodes.ChangeTwoFactorWithMFANotBound] + }); } } diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/PhoneNumberUserValidator.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/PhoneNumberUserValidator.cs index aaa4e6a65..01307f8e2 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/PhoneNumberUserValidator.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.Domain/Microsoft/AspNetCore/Identity/PhoneNumberUserValidator.cs @@ -1,19 +1,14 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Localization; +using Microsoft.Extensions.Localization; using System; using System.Collections.Generic; using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.DependencyInjection; using Volo.Abp.Identity; using Volo.Abp.Identity.Localization; using IIdentityUserRepository = LINGYUN.Abp.Identity.IIdentityUserRepository; namespace Microsoft.AspNetCore.Identity; -[Dependency(ServiceLifetime.Scoped, ReplaceServices = true)] -[ExposeServices(typeof(IUserValidator))] -public class PhoneNumberUserValidator : UserValidator +public class PhoneNumberUserValidator : IUserValidator { private readonly IStringLocalizer _stringLocalizer; private readonly IIdentityUserRepository _userRepository; @@ -25,14 +20,13 @@ public class PhoneNumberUserValidator : UserValidator _userRepository = userRepository; _stringLocalizer = stringLocalizer; } - public override async Task ValidateAsync(UserManager manager, IdentityUser user) + public virtual async Task ValidateAsync(UserManager manager, IdentityUser user) { var errors = new List(); + await ValidatePhoneNumberAsync(manager, user, errors); - return (errors.Count > 0) - ? IdentityResult.Failed(errors.ToArray()) - : await base.ValidateAsync(manager, user); + return errors.Count > 0 ? IdentityResult.Failed(errors.ToArray()) : IdentityResult.Success; } protected async virtual Task ValidatePhoneNumberAsync(UserManager manager, IdentityUser user, ICollection errors) @@ -45,12 +39,12 @@ public class PhoneNumberUserValidator : UserValidator var findUser = await _userRepository.FindByPhoneNumberAsync(phoneNumber, false); if (findUser != null && !findUser.Id.Equals(user.Id)) { - //errors.Add(new IdentityError - //{ - // Code = "DuplicatePhoneNumber", - // Description = _stringLocalizer["DuplicatePhoneNumber", phoneNumber] - //}); - throw new UserFriendlyException(_stringLocalizer["Volo.Abp.Identity:DuplicatePhoneNumber", phoneNumber]); + errors.Add(new IdentityError + { + Code = "DuplicatePhoneNumber", + Description = _stringLocalizer["Volo.Abp.Identity:DuplicatePhoneNumber", phoneNumber] + }); + //throw new UserFriendlyException(_stringLocalizer["Volo.Abp.Identity:DuplicatePhoneNumber", phoneNumber]); } } } diff --git a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs index 27894634d..7ed55a8be 100644 --- a/aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs +++ b/aspnet-core/modules/identity/LINGYUN.Abp.Identity.EntityFrameworkCore/LINGYUN/Abp/Identity/EntityFrameworkCore/EfCoreIdentityUserRepository.cs @@ -1,91 +1,90 @@ -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Internal; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Linq.Dynamic.Core; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.Identity; -using Volo.Abp.Identity.EntityFrameworkCore; - -namespace LINGYUN.Abp.Identity.EntityFrameworkCore; - -public class EfCoreIdentityUserRepository : Volo.Abp.Identity.EntityFrameworkCore.EfCoreIdentityUserRepository, IIdentityUserRepository -{ - public EfCoreIdentityUserRepository( - IDbContextProvider dbContextProvider) - : base(dbContextProvider) - { - } - - public async virtual Task IsPhoneNumberUedAsync( - string phoneNumber, - CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()).IncludeDetails(false) - .AnyAsync(user => user.PhoneNumber == phoneNumber, - GetCancellationToken(cancellationToken)); - } - - public async virtual Task IsPhoneNumberConfirmedAsync( - string phoneNumber, - CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()).IncludeDetails(false) - .AnyAsync(user => user.PhoneNumber == phoneNumber && user.PhoneNumberConfirmed, - GetCancellationToken(cancellationToken)); - } - - public async virtual Task IsNormalizedEmailConfirmedAsync( - string normalizedEmail, - CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()).IncludeDetails(false) - .AnyAsync(user => user.NormalizedEmail == normalizedEmail && user.EmailConfirmed, - GetCancellationToken(cancellationToken)); - } - - public async virtual Task FindByPhoneNumberAsync( - string phoneNumber, - bool isConfirmed = true, - bool includeDetails = false, - CancellationToken cancellationToken = default) - { - return await (await GetDbSetAsync()).IncludeDetails(includeDetails) - .Where(user => user.PhoneNumber == phoneNumber && user.PhoneNumberConfirmed == isConfirmed) - .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task> GetListByIdListAsync( - List userIds, - bool includeDetails = false, - CancellationToken cancellationToken = default - ) - { - return await (await GetDbSetAsync()).IncludeDetails(includeDetails) - .Where(user => userIds.Contains(user.Id)) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task> GetOrganizationUnitsAsync( - Guid id, - string filter = null, - bool includeDetails = false, - int skipCount = 1, - int maxResultCount = 10, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - //var userUoDbSet = dbContext.Set(); +using Microsoft.EntityFrameworkCore; +using System; +using System.Collections.Generic; +using System.Linq; +using System.Linq.Dynamic.Core; +using System.Threading; +using System.Threading.Tasks; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.Identity; +using Volo.Abp.Identity.EntityFrameworkCore; + +namespace LINGYUN.Abp.Identity.EntityFrameworkCore; + +public class EfCoreIdentityUserRepository : Volo.Abp.Identity.EntityFrameworkCore.EfCoreIdentityUserRepository, IIdentityUserRepository +{ + public EfCoreIdentityUserRepository( + IDbContextProvider dbContextProvider) + : base(dbContextProvider) + { + } + + public async virtual Task IsPhoneNumberUedAsync( + string phoneNumber, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).IncludeDetails(false) + .AnyAsync(user => user.PhoneNumber == phoneNumber, + GetCancellationToken(cancellationToken)); + } + + public async virtual Task IsPhoneNumberConfirmedAsync( + string phoneNumber, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).IncludeDetails(false) + .AnyAsync(user => user.PhoneNumber == phoneNumber && user.PhoneNumberConfirmed, + GetCancellationToken(cancellationToken)); + } + + public async virtual Task IsNormalizedEmailConfirmedAsync( + string normalizedEmail, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).IncludeDetails(false) + .AnyAsync(user => user.NormalizedEmail == normalizedEmail && user.EmailConfirmed, + GetCancellationToken(cancellationToken)); + } + + public async virtual Task FindByPhoneNumberAsync( + string phoneNumber, + bool isConfirmed = true, + bool includeDetails = false, + CancellationToken cancellationToken = default) + { + return await (await GetDbSetAsync()).IncludeDetails(includeDetails) + .Where(user => user.PhoneNumber == phoneNumber && user.PhoneNumberConfirmed == isConfirmed) + .FirstOrDefaultAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetListByIdListAsync( + List userIds, + bool includeDetails = false, + CancellationToken cancellationToken = default + ) + { + return await (await GetDbSetAsync()).IncludeDetails(includeDetails) + .Where(user => userIds.Contains(user.Id)) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetOrganizationUnitsAsync( + Guid id, + string filter = null, + bool includeDetails = false, + int skipCount = 1, + int maxResultCount = 10, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + //var userUoDbSet = dbContext.Set(); //var roleUoDbSet = dbContext.Set(); //var userRoleDbSet = dbContext.Set(); //var userUo = from usrUo in userUoDbSet // join usr in dbContext.Users on usrUo.UserId equals usr.Id - // join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) + // join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) // on usrUo.OrganizationUnitId equals ou.Id // where usr.Id == id // select ou; @@ -93,146 +92,146 @@ public class EfCoreIdentityUserRepository : Volo.Abp.Identity.EntityFrameworkCor //var roleUo = from urol in userRoleDbSet // join rol in dbContext.Roles on urol.RoleId equals rol.Id // join rolUo in roleUoDbSet on rol.Id equals rolUo.RoleId - // join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) + // join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) // on rolUo.OrganizationUnitId equals ou.Id // where urol.UserId == id // select ou; - var query = from userOU in dbContext.Set() - join ro in dbContext.Set() on userOU.UserId equals ro.UserId - join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) - on userOU.OrganizationUnitId equals ou.Id - where userOU.UserId == id - select ou; - - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), ou => ou.Code.Contains(filter) || ou.DisplayName.Contains(filter)) - .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task GetUsersInOrganizationUnitCountAsync( - Guid organizationUnitId, - string filter = null, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - where userOu.OrganizationUnitId == organizationUnitId - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .LongCountAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task> GetUsersInOrganizationUnitAsync( - Guid organizationUnitId, - string filter = null, - int skipCount = 1, - int maxResultCount = 10, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - where userOu.OrganizationUnitId == organizationUnitId - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task GetUsersInOrganizationsListCountAsync( - List organizationUnitIds, - string filter = null, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - where organizationUnitIds.Contains(userOu.OrganizationUnitId) - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .LongCountAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task> GetUsersInOrganizationsListAsync( - List organizationUnitIds, - string filter = null, - int skipCount = 1, - int maxResultCount = 10, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - where organizationUnitIds.Contains(userOu.OrganizationUnitId) - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task GetUsersInOrganizationUnitWithChildrenCountAsync( - string code, - string filter = null, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - join ou in dbContext.Set() on userOu.OrganizationUnitId equals ou.Id - where ou.Code.StartsWith(code) - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .LongCountAsync(GetCancellationToken(cancellationToken)); - } - - public async virtual Task> GetUsersInOrganizationUnitWithChildrenAsync( - string code, - string filter = null, - int skipCount = 1, - int maxResultCount = 10, - CancellationToken cancellationToken = default - ) - { - var dbContext = await GetDbContextAsync(); - var query = from userOu in dbContext.Set() - join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id - join ou in dbContext.Set() on userOu.OrganizationUnitId equals ou.Id - where ou.Code.StartsWith(code) - select user; - return await query - .WhereIf(!filter.IsNullOrWhiteSpace(), - user => user.Name.Contains(filter) || user.UserName.Contains(filter) || - user.Surname.Contains(filter) || user.Email.Contains(filter) || - user.PhoneNumber.Contains(filter)) - .PageBy(skipCount, maxResultCount) - .ToListAsync(GetCancellationToken(cancellationToken)); - } -} + var query = from userOU in dbContext.Set() + join ro in dbContext.Set() on userOU.UserId equals ro.UserId + join ou in dbContext.OrganizationUnits.IncludeDetails(includeDetails) + on userOU.OrganizationUnitId equals ou.Id + where userOU.UserId == id + select ou; + + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), ou => ou.Code.Contains(filter) || ou.DisplayName.Contains(filter)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task GetUsersInOrganizationUnitCountAsync( + Guid organizationUnitId, + string filter = null, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + where userOu.OrganizationUnitId == organizationUnitId + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .LongCountAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetUsersInOrganizationUnitAsync( + Guid organizationUnitId, + string filter = null, + int skipCount = 1, + int maxResultCount = 10, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + where userOu.OrganizationUnitId == organizationUnitId + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task GetUsersInOrganizationsListCountAsync( + List organizationUnitIds, + string filter = null, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + where organizationUnitIds.Contains(userOu.OrganizationUnitId) + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .LongCountAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetUsersInOrganizationsListAsync( + List organizationUnitIds, + string filter = null, + int skipCount = 1, + int maxResultCount = 10, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + where organizationUnitIds.Contains(userOu.OrganizationUnitId) + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task GetUsersInOrganizationUnitWithChildrenCountAsync( + string code, + string filter = null, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + join ou in dbContext.Set() on userOu.OrganizationUnitId equals ou.Id + where ou.Code.StartsWith(code) + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .LongCountAsync(GetCancellationToken(cancellationToken)); + } + + public async virtual Task> GetUsersInOrganizationUnitWithChildrenAsync( + string code, + string filter = null, + int skipCount = 1, + int maxResultCount = 10, + CancellationToken cancellationToken = default + ) + { + var dbContext = await GetDbContextAsync(); + var query = from userOu in dbContext.Set() + join user in (await GetDbSetAsync()) on userOu.UserId equals user.Id + join ou in dbContext.Set() on userOu.OrganizationUnitId equals ou.Id + where ou.Code.StartsWith(code) + select user; + return await query + .WhereIf(!filter.IsNullOrWhiteSpace(), + user => user.Name.Contains(filter) || user.UserName.Contains(filter) || + user.Surname.Contains(filter) || user.Email.Contains(filter) || + user.PhoneNumber.Contains(filter)) + .PageBy(skipCount, maxResultCount) + .ToListAsync(GetCancellationToken(cancellationToken)); + } +} diff --git a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.SmsValidator/LINGYUN/Abp/IdentityServer/SmsValidator/SmsTokenGrantValidator.cs b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.SmsValidator/LINGYUN/Abp/IdentityServer/SmsValidator/SmsTokenGrantValidator.cs index 3313104ed..fad58ea33 100644 --- a/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.SmsValidator/LINGYUN/Abp/IdentityServer/SmsValidator/SmsTokenGrantValidator.cs +++ b/aspnet-core/modules/identityServer/LINGYUN.Abp.IdentityServer.SmsValidator/LINGYUN/Abp/IdentityServer/SmsValidator/SmsTokenGrantValidator.cs @@ -3,6 +3,7 @@ using IdentityServer4.Events; using IdentityServer4.Models; using IdentityServer4.Services; using IdentityServer4.Validation; +using LINGYUN.Abp.Identity; using Microsoft.AspNetCore.Identity; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; @@ -103,8 +104,11 @@ public class SmsTokenGrantValidator : IExtensionGrantValidator else { Logger.LogInformation("Authentication failed for username: {username}, reason: access failed", currentUser.UserName); - var userAccessFailedError = identityResult.LocalizeErrors(IdentityLocalizer); + + + var userAccessFailedError = IdentityLocalizer["InvalidGrant:PhoneVerifyInvalid"].Value; context.Result = new GrantValidationResult(TokenRequestErrors.InvalidGrant, userAccessFailedError); + await EventService.RaiseAsync(new UserLoginFailureEvent(currentUser.UserName, userAccessFailedError, false)); } diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementDomainModule.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementDomainModule.cs index 271944f14..9bcb740ca 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementDomainModule.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/AbpLocalizationManagementDomainModule.cs @@ -1,9 +1,4 @@ using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using Polly; -using System; using System.Threading; using System.Threading.Tasks; using Volo.Abp; @@ -48,9 +43,6 @@ public class AbpLocalizationManagementDomainModule : AbpModule options.EtoMappings.Add(typeof(AbpLocalizationManagementDomainModule)); options.EtoMappings.Add(typeof(AbpLocalizationManagementDomainModule)); }); - - // 定期更新本地化缓存缓解措施 - context.Services.AddHostedService(); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationStoreCache.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationStoreCache.cs index 1e726cb59..c6fd8ef3d 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationStoreCache.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationStoreCache.cs @@ -1,8 +1,10 @@ using Microsoft.Extensions.Options; +using System; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; +using Volo.Abp.DistributedLocking; using Volo.Abp.Localization; namespace LINGYUN.Abp.LocalizationManagement.External; @@ -13,16 +15,19 @@ public class ExternalLocalizationStoreCache : IExternalLocalizationStoreCache, I protected IDistributedCache ResourcesCache { get; } protected AbpLocalizationOptions LocalizationOptions { get; } protected IResourceRepository ResourceRepository { get; } + protected IAbpDistributedLock DistributedLock { get; } public ExternalLocalizationStoreCache( IDistributedCache resourcesCache, IDistributedCache resourceCache, IOptions localizationOptions, - IResourceRepository resourceRepository) + IResourceRepository resourceRepository, + IAbpDistributedLock distributedLock) { ResourceCache = resourceCache; ResourcesCache = resourcesCache; ResourceRepository = resourceRepository; + DistributedLock = distributedLock; LocalizationOptions = localizationOptions.Value; } @@ -45,102 +50,115 @@ public class ExternalLocalizationStoreCache : IExternalLocalizationStoreCache, I public virtual LocalizationResourceCacheItem GetResourceOrNull(string resourceName) { - var cacheItem = GetResourceCacheItem(resourceName); - - return cacheItem.IsEnabled ? cacheItem : null; + var cacheItem = ResourceCache.Get(resourceName); + + return cacheItem?.IsEnabled == true ? cacheItem : null; } public async virtual Task GetResourceOrNullAsync(string resourceName) { var cacheItem = await GetResourceCacheItemAsync(resourceName); - return cacheItem.IsEnabled ? cacheItem : null; + return cacheItem?.IsEnabled == true ? cacheItem : null; } public async virtual Task GetResourcesAsync() { var cacheItem = await GetResourcesCacheItemAsync(); - return cacheItem.Resources + return cacheItem?.Resources .Where(x => x.IsEnabled) .Where(x => !LocalizationOptions.Resources.ContainsKey(x.Name)) .ToArray(); } - protected virtual LocalizationResourceCacheItem GetResourceCacheItem(string resourceName) + internal async Task UpdateCache(string resourceName) { - var cacheItem = ResourceCache.Get(resourceName); - if (cacheItem == null) + if (resourceName.IsNullOrWhiteSpace()) { - var resource = ResourceRepository.FindByName(resourceName); - - if (resource == null) - { - cacheItem = new LocalizationResourceCacheItem(resourceName) - { - IsEnabled = false - }; - } - else - { - cacheItem = new LocalizationResourceCacheItem(resource.Name, resource.DefaultCultureName) - { - IsEnabled = resource.Enable - }; - } - - ResourceCache.Set(resourceName, cacheItem); + await CreateResourcesCacheItemAsync(); + } + else + { + await CreateResourceCacheItemAsync(resourceName); } - - return cacheItem; } protected async virtual Task GetResourceCacheItemAsync(string resourceName) { var cacheItem = await ResourceCache.GetAsync(resourceName); - if (cacheItem == null) + if (cacheItem != null) + { + return cacheItem; + } + + return await CreateResourceCacheItemAsync(resourceName); + } + + protected async virtual Task CreateResourceCacheItemAsync(string resourceName) + { + await using var handle = await DistributedLock.TryAcquireAsync($"{nameof(ExternalLocalizationStoreCache)}_{nameof(CreateResourceCacheItemAsync)}"); + + if (handle == null) { - var resource = await ResourceRepository.FindByNameAsync(resourceName); - if (resource == null) + return null; + } + + LocalizationResourceCacheItem cacheItem; + var resource = await ResourceRepository.FindByNameAsync(resourceName); + if (resource == null) + { + cacheItem = new LocalizationResourceCacheItem(resourceName) { - cacheItem = new LocalizationResourceCacheItem(resourceName) - { - IsEnabled = false - }; - } - else + IsEnabled = false + }; + } + else + { + cacheItem = new LocalizationResourceCacheItem(resource.Name, resource.DefaultCultureName) { - cacheItem = new LocalizationResourceCacheItem(resource.Name, resource.DefaultCultureName) - { - IsEnabled = resource.Enable - }; - } - - await ResourceCache.SetAsync(resourceName, cacheItem); + IsEnabled = resource.Enable + }; } + await ResourceCache.SetAsync(resourceName, cacheItem); + return cacheItem; } protected async virtual Task GetResourcesCacheItemAsync() { var cacheItem = await ResourcesCache.GetAsync(LocalizationResourcesCacheItem.CacheKey); - if (cacheItem == null) + if (cacheItem != null) { - var resources = await ResourceRepository.GetListAsync(); - var resourceItems = resources - .Where(x => !LocalizationOptions.Resources.ContainsKey(x.Name)) - .Select(x => new LocalizationResourceCacheItem(x.Name, x.DefaultCultureName) - { - IsEnabled = x.Enable, - }) - .ToList(); - - cacheItem = new LocalizationResourcesCacheItem(resourceItems); - - await ResourcesCache.SetAsync(LocalizationResourcesCacheItem.CacheKey, cacheItem); + return cacheItem; } + return await CreateResourcesCacheItemAsync(); + } + + protected async virtual Task CreateResourcesCacheItemAsync() + { + await using var handle = await DistributedLock.TryAcquireAsync($"{nameof(ExternalLocalizationStoreCache)}_{nameof(CreateResourcesCacheItemAsync)}"); + + if (handle == null) + { + return null; + } + + var resources = await ResourceRepository.GetListAsync(); + var resourceItems = resources + .Where(x => !LocalizationOptions.Resources.ContainsKey(x.Name)) + .Select(x => new LocalizationResourceCacheItem(x.Name, x.DefaultCultureName) + { + IsEnabled = x.Enable, + }) + .ToList(); + + var cacheItem = new LocalizationResourcesCacheItem(resourceItems); + + await ResourcesCache.SetAsync(LocalizationResourcesCacheItem.CacheKey, cacheItem); + return cacheItem; } } diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationTextStoreCache.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationTextStoreCache.cs index 3234ee09e..e5f796c73 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationTextStoreCache.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/External/ExternalLocalizationTextStoreCache.cs @@ -8,7 +8,6 @@ using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; using Volo.Abp.Localization; using Volo.Abp.Threading; -using Volo.Abp.Uow; namespace LINGYUN.Abp.LocalizationManagement.External; @@ -40,7 +39,12 @@ public class ExternalLocalizationTextStoreCache : IExternalLocalizationTextStore var cacheKey = ExternalLocalizationTextCacheItem.CalculateCacheKey(resourceName, cultureName); var stampCacheKey = ExternalLocalizationTextStampCacheItem.CalculateCacheKey(resourceName, cultureName); - await using var lockHandle = await DistributedLock.TryAcquireAsync(cacheKey, TimeSpan.FromMinutes(1d)); + await using var lockHandle = await DistributedLock.TryAcquireAsync(cacheKey); + + if (lockHandle == null) + { + return; + } await DistributedCache.RemoveAsync(cacheKey); @@ -93,22 +97,13 @@ public class ExternalLocalizationTextStoreCache : IExternalLocalizationTextStore return distributeCacheItem.Texts; } - await using var lockHandle = await DistributedLock.TryAcquireAsync(cacheKey, TimeSpan.FromMinutes(1d)); + distributeCacheItem = await CreateCacheItemAsync(resource, cultureName); - if (lockHandle == null) + if (distributeCacheItem == null) { return new Dictionary(); } - distributeCacheItem = await CreateCacheItemAsync(resource, cultureName); - - await DistributedCache.SetAsync(cacheKey, distributeCacheItem); - - stampCacheItem = new ExternalLocalizationTextStampCacheItem(Guid.NewGuid().ToString()); - await StampCache.SetAsync(stampCacheKey, stampCacheItem); - - MemoryCache[cacheKey] = new LocalizationTextMemoryCacheItem(distributeCacheItem.Texts, stampCacheItem.Stamp); - return distributeCacheItem.Texts; } } @@ -117,11 +112,24 @@ public class ExternalLocalizationTextStoreCache : IExternalLocalizationTextStore return DateTime.Now.Subtract(memoryCacheItem.LastCheckTime).TotalSeconds >= 30.0; } + internal async Task UpdateCache(LocalizationResourceBase resource, string cultureName) + { + await CreateCacheItemAsync(resource, cultureName); + } + protected async virtual Task CreateCacheItemAsync(LocalizationResourceBase resource, string cultureName) { + await using var lockHandle = await DistributedLock.TryAcquireAsync($"{nameof(ExternalLocalizationTextStoreCache)}_{nameof(CreateCacheItemAsync)}"); + + if (lockHandle == null) + { + return null; + } + + var cacheKey = ExternalLocalizationTextCacheItem.CalculateCacheKey(resource.ResourceName, cultureName); + var stampCacheKey = ExternalLocalizationTextStampCacheItem.CalculateCacheKey(resource.ResourceName, cultureName); + using var scope = ServiceScopeFactory.CreateScope(); - var unitOfWorkManager = scope.ServiceProvider.GetRequiredService(); - using var unitOfWork = unitOfWorkManager.Begin(requiresNew: true); var repo = scope.ServiceProvider.GetRequiredService(); var texts = await repo.GetListAsync(resource.ResourceName, cultureName); @@ -133,6 +141,14 @@ public class ExternalLocalizationTextStoreCache : IExternalLocalizationTextStore fillTexts[text.Key] = text.Value; } - return new ExternalLocalizationTextCacheItem(fillTexts); + var cacheItem = new ExternalLocalizationTextCacheItem(fillTexts); + await DistributedCache.SetAsync(cacheKey, cacheItem); + + var stampCacheItem = new ExternalLocalizationTextStampCacheItem(Guid.NewGuid().ToString()); + await StampCache.SetAsync(stampCacheKey, stampCacheItem); + + MemoryCache[cacheKey] = new LocalizationTextMemoryCacheItem(cacheItem.Texts, stampCacheItem.Stamp); + + return cacheItem; } } diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationLanguageStoreCache.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationLanguageStoreCache.cs index 34471125f..62427f03e 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationLanguageStoreCache.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationLanguageStoreCache.cs @@ -1,9 +1,11 @@ -using System.Collections.Generic; +using Microsoft.Extensions.Options; +using System.Collections.Generic; using System.Collections.Immutable; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; +using Volo.Abp.DistributedLocking; using Volo.Abp.Domain.ChangeTracking; using Volo.Abp.Localization; @@ -13,13 +15,19 @@ public class LocalizationLanguageStoreCache : ILocalizationLanguageStoreCache, I { protected IDistributedCache LanguageCache { get; } protected ILanguageRepository LanguageRepository { get; } + protected IAbpDistributedLock DistributedLock { get; } + protected AbpLocalizationOptions Options { get; } public LocalizationLanguageStoreCache( IDistributedCache languageCache, - ILanguageRepository languageRepository) + ILanguageRepository languageRepository, + IAbpDistributedLock distributedLock, + IOptions options) { LanguageCache = languageCache; LanguageRepository = languageRepository; + DistributedLock = distributedLock; + Options = options.Value; } [DisableEntityChangeTracking] @@ -27,7 +35,12 @@ public class LocalizationLanguageStoreCache : ILocalizationLanguageStoreCache, I { var cacheItem = await GetCacheItemAsync(); - return cacheItem.Languages.ToImmutableList(); + return cacheItem?.Languages.ToImmutableList() ?? [..Options.Languages]; + } + + internal async Task UpdateCache() + { + await CreateCacheItemAsync(); } protected async virtual Task GetCacheItemAsync() @@ -38,10 +51,22 @@ public class LocalizationLanguageStoreCache : ILocalizationLanguageStoreCache, I return cacheItem; } + return await CreateCacheItemAsync(); + } + + protected async virtual Task CreateCacheItemAsync() + { + await using var handle = await DistributedLock.TryAcquireAsync($"{nameof(LocalizationLanguageStoreCache)}_{nameof(GetCacheItemAsync)}"); + + if (handle == null) + { + return null; + } + var languages = await LanguageRepository.GetListAsync(); - cacheItem = new LocalizationLanguageCacheItem( - languages.Select(x => + var cacheItem = new LocalizationLanguageCacheItem( + languages.Select(x => new LanguageInfo(x.CultureName, x.UiCultureName, x.DisplayName)) .ToList()); diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextCacheRefreshWorker.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextCacheRefreshWorker.cs deleted file mode 100644 index 26c764a8e..000000000 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextCacheRefreshWorker.cs +++ /dev/null @@ -1,95 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Options; -using System; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.ExceptionHandling; -using Volo.Abp.Localization; -using Volo.Abp.Localization.External; -using Volo.Abp.Threading; - -namespace LINGYUN.Abp.LocalizationManagement; -/// -/// 本地化缓存刷新作业 -/// -public class LocalizationTextCacheRefreshWorker : BackgroundService -{ - private readonly AbpAsyncTimer _timer; - private readonly IServiceScopeFactory _serviceScopeFactory; - - public ILogger Logger { protected get; set; } - protected CancellationToken StoppingToken { get; set; } - - public LocalizationTextCacheRefreshWorker( - AbpAsyncTimer timer, - IServiceScopeFactory serviceScopeFactory) - { - _serviceScopeFactory = serviceScopeFactory; - _timer = timer; - _timer.Period = 60000; - _timer.Elapsed += Timer_Elapsed; - - Logger = NullLogger.Instance; - } - - protected override Task ExecuteAsync(CancellationToken stoppingToken) - { - StoppingToken = stoppingToken; - _timer.Start(stoppingToken); - - return Task.CompletedTask; - } - - private async Task Timer_Elapsed(AbpAsyncTimer timer) - { - await DoWorkAsync(StoppingToken); - } - - public async virtual Task DoWorkAsync(CancellationToken cancellationToken = default) - { - using (var scope = _serviceScopeFactory.CreateScope()) - { - try - { - // 定期刷新本地化缓存 - var cache = scope.ServiceProvider.GetService(); - if (cache != null) - { - var options = scope.ServiceProvider.GetRequiredService>().Value; - var languageProvider = scope.ServiceProvider.GetRequiredService(); - var externalLocalizationStore = scope.ServiceProvider.GetRequiredService(); - - var languages = await languageProvider.GetLanguagesAsync(); - - var resources = options - .Resources - .Values - .Union( - await externalLocalizationStore.GetResourcesAsync() - ).ToArray(); - - - foreach (var language in languages) - { - foreach (var resource in resources) - { - await cache.UpdateStaticCache(resource, language.CultureName); - } - } - } - } - catch (Exception ex) - { - await scope.ServiceProvider - .GetRequiredService() - .NotifyAsync(new ExceptionNotificationContext(ex)); - - Logger.LogException(ex); - } - } - } -} diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextStoreCache.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextStoreCache.cs index 7bf23de18..9fb076a36 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextStoreCache.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/LocalizationTextStoreCache.cs @@ -5,6 +5,7 @@ using System.Threading; using System.Threading.Tasks; using Volo.Abp.Caching; using Volo.Abp.DependencyInjection; +using Volo.Abp.DistributedLocking; using Volo.Abp.Domain.Repositories; using Volo.Abp.Localization; using Volo.Abp.Threading; @@ -15,12 +16,16 @@ public class LocalizationTextStoreCache : ILocalizationTextStoreCache, ISingleto { private static readonly SemaphoreSlim _cacheLock = new SemaphoreSlim(1, 1); private static readonly LocalizationResourceDictionary _staticCache = new LocalizationResourceDictionary(); + + protected IAbpDistributedLock DistributedLock { get; } protected IServiceScopeFactory ServiceScopeFactory { get; } protected IDistributedCache LocalizationTextCache { get; } public LocalizationTextStoreCache( - IServiceScopeFactory serviceScopeFactory, + IAbpDistributedLock distributedLock, + IServiceScopeFactory serviceScopeFactory, IDistributedCache localizationTextCache) { + DistributedLock = distributedLock; ServiceScopeFactory = serviceScopeFactory; LocalizationTextCache = localizationTextCache; } @@ -40,11 +45,13 @@ public class LocalizationTextStoreCache : ILocalizationTextStoreCache, ISingleto public async virtual Task FillAsync(LocalizationResourceBase resource, string cultureName, Dictionary dictionary) { var cacheItem = await GetCacheItemAsync(resource, cultureName); - - foreach (var text in cacheItem.Texts) + if (cacheItem != null) { - var localizedString = new LocalizedString(text.Key, text.Value); - dictionary[text.Key] = localizedString; + foreach (var text in cacheItem.Texts) + { + var localizedString = new LocalizedString(text.Key, text.Value); + dictionary[text.Key] = localizedString; + } } } @@ -58,18 +65,21 @@ public class LocalizationTextStoreCache : ILocalizationTextStoreCache, ISingleto return null; } - internal async Task UpdateStaticCache(LocalizationResourceBase resource, string cultureName) + internal async Task UpdateCache(LocalizationResourceBase resource, string cultureName) { using (await _cacheLock.LockAsync()) { var cacheItem = await GetCacheItemAsync(resource, cultureName); - var textDic = _staticCache + if (cacheItem != null) + { + var textDic = _staticCache .GetOrAdd(resource.ResourceName, _ => new LocalizationCultureDictionary()) .GetOrAdd(cultureName, _ => new LocalizationTextDictionary()); - foreach (var text in cacheItem.Texts) - { - textDic[text.Key] = new LocalizedString(text.Key, text.Value); + foreach (var text in cacheItem.Texts) + { + textDic[text.Key] = new LocalizedString(text.Key, text.Value); + } } } } @@ -84,6 +94,13 @@ public class LocalizationTextStoreCache : ILocalizationTextStoreCache, ISingleto return cacheItem; } + await using var handle = await DistributedLock.TryAcquireAsync($"{nameof(LocalizationTextStoreCache)}_{nameof(GetCacheItemAsync)}"); + + if (handle == null) + { + return null; + } + var setTexts = new Dictionary(); using (var scope = ServiceScopeFactory.CreateScope()) { diff --git a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs index 22bfee209..2172b1a77 100644 --- a/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs +++ b/aspnet-core/modules/localization-management/LINGYUN.Abp.LocalizationManagement.Domain/LINGYUN/Abp/LocalizationManagement/StaticLocalizationSaver.cs @@ -1,4 +1,5 @@ -using Microsoft.Extensions.Caching.Distributed; +using LINGYUN.Abp.LocalizationManagement.External; +using Microsoft.Extensions.Caching.Distributed; using Microsoft.Extensions.Localization; using Microsoft.Extensions.Logging; using Microsoft.Extensions.Options; @@ -34,6 +35,11 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen protected AbpLocalizationOptions LocalizationOptions { get; } protected AbpLocalizationManagementOptions LocalizationManagementOptions { get; } + protected IExternalLocalizationTextStoreCache ExternalLocalizationTextStoreCache { get; } + protected IExternalLocalizationStoreCache ExternalLocalizationStoreCache { get; } + protected ILocalizationLanguageStoreCache LocalizationLanguageStoreCache { get; } + protected ILocalizationTextStoreCache LocalizationTextStoreCache { get; } + protected ILanguageRepository LanguageRepository { get; } protected IResourceRepository ResourceRepository { get; } protected ITextRepository TextRepository { get; } @@ -50,6 +56,10 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen IOptions cacheOptions, IOptions localizationOptions, IOptions localizationManagementOptions, + IExternalLocalizationTextStoreCache externalLocalizationTextStoreCache, + IExternalLocalizationStoreCache externalLocalizationStoreCache, + ILocalizationLanguageStoreCache localizationLanguageStoreCache, + ILocalizationTextStoreCache localizationTextStoreCache, ILanguageRepository languageRepository, IResourceRepository resourceRepository, ITextRepository textRepository) @@ -65,6 +75,10 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen StringLocalizerFactory = stringLocalizerFactory; LocalizationOptions = localizationOptions.Value; LocalizationManagementOptions = localizationManagementOptions.Value; + ExternalLocalizationTextStoreCache = externalLocalizationTextStoreCache; + ExternalLocalizationStoreCache = externalLocalizationStoreCache; + LocalizationLanguageStoreCache = localizationLanguageStoreCache; + LocalizationTextStoreCache = localizationTextStoreCache; LanguageRepository = languageRepository; ResourceRepository = resourceRepository; TextRepository = textRepository; @@ -93,6 +107,8 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen await SaveLanguagesAsync(); await SaveResourcesAsync(); await SaveTextsAsync(); + + await PreCacheDynamicLocalizationsAsync(); } catch (Exception ex) { @@ -114,6 +130,34 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen Logger.LogInformation("Completed to save static localizations."); } + private async Task PreCacheDynamicLocalizationsAsync() + { + if (LocalizationLanguageStoreCache is LocalizationLanguageStoreCache languageStoreCache) + { + await languageStoreCache.UpdateCache(); + } + + foreach (var resource in LocalizationOptions.Resources) + { + if (ExternalLocalizationStoreCache is ExternalLocalizationStoreCache localizationStoreCache) + { + await localizationStoreCache.UpdateCache(resource.Key); + } + + foreach (var language in LocalizationOptions.Languages) + { + if (ExternalLocalizationTextStoreCache is ExternalLocalizationTextStoreCache externalLocalizationTextStoreCache) + { + await externalLocalizationTextStoreCache.UpdateCache(resource.Value, language.CultureName); + } + if (LocalizationTextStoreCache is LocalizationTextStoreCache localizationTextStoreCache) + { + await localizationTextStoreCache.UpdateCache(resource.Value, language.CultureName); + } + } + } + } + private async Task SaveLanguagesAsync() { var languageHashKey = GetApplicationLanguageHashKey(); @@ -197,7 +241,7 @@ public class StaticLocalizationSaver : IStaticLocalizationSaver, ITransientDepen { var stringLocalizer = StringLocalizerFactory.Create(resource.ResourceType); - var localizedStrings = await stringLocalizer.GetAllStringsAsync(false, false, false); + var localizedStrings = stringLocalizer.GetAllStrings(false, false, false); var textHashKey = GetApplicationTextHashKey(resource.ResourceName, language.CultureName); var textHashCache = await Cache.GetStringAsync(textHashKey, CancellationTokenProvider.Token); diff --git a/aspnet-core/modules/openIddict/LINGYUN.Abp.OpenIddict.Sms/LINGYUN/Abp/OpenIddict/Sms/SmsTokenExtensionGrant.cs b/aspnet-core/modules/openIddict/LINGYUN.Abp.OpenIddict.Sms/LINGYUN/Abp/OpenIddict/Sms/SmsTokenExtensionGrant.cs index 9c5827ded..b21a7a1a3 100644 --- a/aspnet-core/modules/openIddict/LINGYUN.Abp.OpenIddict.Sms/LINGYUN/Abp/OpenIddict/Sms/SmsTokenExtensionGrant.cs +++ b/aspnet-core/modules/openIddict/LINGYUN.Abp.OpenIddict.Sms/LINGYUN/Abp/OpenIddict/Sms/SmsTokenExtensionGrant.cs @@ -102,7 +102,7 @@ public class SmsTokenExtensionGrant : ITokenExtensionGrant logger.LogInformation("Authentication failed for username: {username}, reason: access failed", currentUser.UserName); - errorDescription = identityResult.LocalizeErrors(localizer); + errorDescription = localizer["InvalidGrant:PhoneVerifyInvalid"].Value; } await SaveSecurityLogAsync(context, currentUser, SmsTokenExtensionGrantConsts.SecurityCodeFailed); diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/AbpBlobStoringOssManagementModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/AbpBlobStoringOssManagementModule.cs deleted file mode 100644 index 4e37daf97..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/AbpBlobStoringOssManagementModule.cs +++ /dev/null @@ -1,11 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using Volo.Abp.BlobStoring; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -[DependsOn(typeof(AbpBlobStoringModule))] -[DependsOn(typeof(AbpOssManagementHttpApiClientModule))] -public class AbpBlobStoringOssManagementModule : AbpModule -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobContainerConfigurationExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobContainerConfigurationExtensions.cs deleted file mode 100644 index 8d42fe2bf..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobContainerConfigurationExtensions.cs +++ /dev/null @@ -1,25 +0,0 @@ -using System; -using Volo.Abp.BlobStoring; - -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -public static class OssManagementBlobContainerConfigurationExtensions -{ - public static OssManagementBlobProviderConfiguration GetOssManagementConfiguration( - this BlobContainerConfiguration containerConfiguration) - { - return new OssManagementBlobProviderConfiguration(containerConfiguration); - } - - public static BlobContainerConfiguration UseOssManagement( - this BlobContainerConfiguration containerConfiguration, - Action fileSystemConfigureAction) - { - containerConfiguration.ProviderType = typeof(OssManagementBlobProvider); - containerConfiguration.NamingNormalizers.TryAdd(); - - fileSystemConfigureAction(new OssManagementBlobProviderConfiguration(containerConfiguration)); - - return containerConfiguration; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs deleted file mode 100644 index 9e7b60f63..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobNamingNormalizer.cs +++ /dev/null @@ -1,30 +0,0 @@ -using Volo.Abp.BlobStoring; -using Volo.Abp.DependencyInjection; - -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -public class OssManagementBlobNamingNormalizer : IBlobNamingNormalizer, ITransientDependency -{ - public virtual string NormalizeBlobName(string blobName) - { - return NormalizeName(blobName); - } - - public virtual string NormalizeContainerName(string containerName) - { - return NormalizeName(containerName); - } - - protected virtual string NormalizeName(string name) - { - // 取消路径修饰符 - name = name.Replace("./", "").Replace("../", ""); - // 取消反斜杠开头 - if (name.StartsWith("/")) - { - name = name.Substring(1); - } - - return name; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs deleted file mode 100644 index 4e2af27be..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProvider.cs +++ /dev/null @@ -1,98 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Integration; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using System; -using System.IO; -using System.Threading.Tasks; -using Volo.Abp.BlobStoring; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; - -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -public class OssManagementBlobProvider : BlobProviderBase, ITransientDependency -{ - public ILogger Logger { protected get; set; } - - private readonly IOssObjectIntegrationService _ossObjectAppService; - public OssManagementBlobProvider( - IOssObjectIntegrationService ossObjectAppService) - { - _ossObjectAppService = ossObjectAppService; - - Logger = NullLogger.Instance; - } - - public override async Task DeleteAsync(BlobProviderDeleteArgs args) - { - await _ossObjectAppService.DeleteAsync(new GetOssObjectInput - { - Bucket = args.ContainerName, - Path = GetOssPath(args), - Object = GetOssName(args), - }); - return true; - } - - public override async Task ExistsAsync(BlobProviderExistsArgs args) - { - var result = await _ossObjectAppService.ExistsAsync(new GetOssObjectInput - { - Bucket = args.ContainerName, - Path = GetOssPath(args), - Object = GetOssName(args), - }); - return result.IsExists; - } - - public override async Task GetOrNullAsync(BlobProviderGetArgs args) - { - var content = await _ossObjectAppService.GetAsync(new GetOssObjectInput - { - Bucket = args.ContainerName, - Path = GetOssPath(args), - Object = GetOssName(args), - }); - - return content?.GetStream(); - } - - public override async Task SaveAsync(BlobProviderSaveArgs args) - { - await _ossObjectAppService.CreateAsync(new CreateOssObjectInput - { - Bucket = args.ContainerName, - Overwrite = args.OverrideExisting, - Path = GetOssPath(args), - FileName = GetOssName(args), - File = new RemoteStreamContent(args.BlobStream) - }); - } - - protected virtual string GetOssPath(BlobProviderArgs args) - { - // path1/path2/path3/path3/path5/file.txt => path1/path2/path3/path3/path5/ - if (args.BlobName.Contains("/")) - { - var lastIndex = args.BlobName.LastIndexOf('/'); - return args.BlobName.Substring(0, lastIndex); - } - - return args.BlobName.EnsureEndsWith('/'); - } - - protected virtual string GetOssName(BlobProviderArgs args) - { - // path1/path2/path3/path3/path5/file.txt => file.txt - if (args.BlobName.Contains("/")) - { - var lastIndex = args.BlobName.LastIndexOf('/'); - - // TODO: 用户传递以 / 为结尾符的文件名,让系统抛出异常? - return args.BlobName.Substring(lastIndex + 1); - } - - return args.BlobName; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfiguration.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfiguration.cs deleted file mode 100644 index 83263275e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfiguration.cs +++ /dev/null @@ -1,20 +0,0 @@ -using Volo.Abp; -using Volo.Abp.BlobStoring; - -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -public class OssManagementBlobProviderConfiguration -{ - public string Bucket - { - get => _containerConfiguration.GetConfiguration(OssManagementBlobProviderConfigurationNames.Bucket); - set => _containerConfiguration.SetConfiguration(OssManagementBlobProviderConfigurationNames.Bucket, Check.NotNullOrWhiteSpace(value, nameof(value))); - } - - private readonly BlobContainerConfiguration _containerConfiguration; - - public OssManagementBlobProviderConfiguration(BlobContainerConfiguration containerConfiguration) - { - _containerConfiguration = containerConfiguration; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfigurationNames.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfigurationNames.cs deleted file mode 100644 index 82811c6dc..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/LINGYUN/Abp/BlobStoring/OssManagement/OssManagementBlobProviderConfigurationNames.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LINGYUN.Abp.BlobStoring.OssManagement; - -public class OssManagementBlobProviderConfigurationNames -{ - public const string Bucket = "OssManagement:Bucket"; -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.EN.md deleted file mode 100644 index 4039e2014..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.EN.md +++ /dev/null @@ -1,96 +0,0 @@ -# LINGYUN.Abp.BlobStoring.OssManagement - -OSS Management implementation of ABP framework's object storage provider **IBlobProvider** - -## Configuration - -Module reference as needed, depends on the OssManagement module, so you need to configure the remote Oss management module's client proxy. - -First, define the **appsettings.json** file: - -```json -{ - "OssManagement": { - "Bucket": "your-bucket-name" - }, - "RemoteServices": { - "AbpOssManagement": { - "BaseUrl": "http://127.0.0.1:30025", - "IdentityClient": "InternalServiceClient", - "UseCurrentAccessToken": false - } - }, - "IdentityClients": { - "InternalServiceClient": { - "Authority": "http://127.0.0.1:44385", - "RequireHttps": false, - "GrantType": "client_credentials", - "Scope": "lingyun-abp-application", - "ClientId": "InternalServiceClient", - "ClientSecret": "1q2w3E*" - } - } -} -``` - -```csharp -[DependsOn(typeof(AbpBlobStoringOssManagementModule))] -public class YouProjectModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - var preActions = context.Services.GetPreConfigureActions(); - Configure(options => - { - preActions.Configure(options); - // YouContainer use oss management - options.Containers.Configure((containerConfiguration) => - { - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); - - // all container use oss management - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - // use oss management - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); - }); - } -} -``` - -## Features - -* Implements ABP framework's IBlobProvider interface -* Provides Blob storage implementation based on OssManagement -* Supports container-level configuration -* Supports global configuration -* Supports remote service calls - -## Configuration Items - -* Bucket: Storage bucket name -* RemoteServices.AbpOssManagement: - * BaseUrl: OSS management service base URL - * IdentityClient: Identity client name - * UseCurrentAccessToken: Whether to use current access token -* IdentityClients: Identity client configuration - * Authority: Authentication server address - * RequireHttps: Whether HTTPS is required - * GrantType: Authorization type - * Scope: Authorization scope - * ClientId: Client ID - * ClientSecret: Client secret - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.md deleted file mode 100644 index 79c3c65e5..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.BlobStoring.OssManagement/README.md +++ /dev/null @@ -1,69 +0,0 @@ -# LINGYUN.Abp.BlobStoring.OssManagement - -abp框架对象存储提供者**IBlobProvider**的Oss管理模块实现 - -## 配置使用 - -模块按需引用, 依赖于OssManagement模块, 所以需要配置远端Oss管理模块的客户端代理 - -事先定义**appsettings.json**文件 - -```json -{ - "OssManagement": { - "Bucket": "你定义的BucketName" - }, - "RemoteServices": { - "AbpOssManagement": { - "BaseUrl": "http://127.0.0.1:30025", - "IdentityClient": "InternalServiceClient", - "UseCurrentAccessToken": false - } - }, - "IdentityClients": { - "InternalServiceClient": { - "Authority": "http://127.0.0.1:44385", - "RequireHttps": false, - "GrantType": "client_credentials", - "Scope": "lingyun-abp-application", - "ClientId": "InternalServiceClient", - "ClientSecret": "1q2w3E*" - } - } -} - -``` - -```csharp -[DependsOn(typeof(AbpBlobStoringOssManagementModule))] -public class YouProjectModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - var preActions = context.Services.GetPreConfigureActions(); - Configure(options => - { - preActions.Configure(options); - // YouContainer use oss management - options.Containers.Configure((containerConfiguration) => - { - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); - - // all container use oss management - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - // use oss management - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); - }); - } -} -``` diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs deleted file mode 100644 index b5805cae9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainer.cs +++ /dev/null @@ -1,427 +0,0 @@ -using Aliyun.OSS; -using LINGYUN.Abp.BlobStoring.Aliyun; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.Aliyun; - -/// -/// Oss容器的阿里云实现 -/// -internal class AliyunOssContainer : OssContainerBase, IOssObjectExpireor -{ - protected ICurrentTenant CurrentTenant { get; } - protected IOssClientFactory OssClientFactory { get; } - public AliyunOssContainer( - ICurrentTenant currentTenant, - IOssClientFactory ossClientFactory, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - : base(options, serviceScopeFactory) - { - CurrentTenant = currentTenant; - OssClientFactory = ossClientFactory; - } - public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var path = GetBasePath(request.Path); - var aliyunRequest = new DeleteObjectsRequest(request.Bucket, request.Objects.Select(x => x += path).ToList()); - - ossClient.DeleteObjects(aliyunRequest); - } - - public async override Task CreateAsync(string name) - { - var ossClient = await CreateClientAsync(); - - if (BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerAlreadyExists); - } - - var bucket = ossClient.CreateBucket(name); - - return new OssContainer( - bucket.Name, - bucket.CreationDate, - 0L, - bucket.CreationDate, - new Dictionary - { - { "Id", bucket.Owner?.Id }, - { "DisplayName", bucket.Owner?.DisplayName } - }); - } - - public async override Task ObjectExistsAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - return ObjectExists(ossClient, request.Bucket, objectName); - } - - public async override Task CreateObjectAsync(CreateOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (!request.Overwrite && ObjectExists(ossClient, request.Bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - } - - // 当一个对象名称是以 / 结尾时,不论该对象是否存有数据,都以目录的形式存在 - // 详情见:https://help.aliyun.com/document_detail/31910.html - if (objectName.EndsWith("/") && - request.Content.IsNullOrEmpty()) - { - var emptyStream = new MemoryStream(); - var emptyData = System.Text.Encoding.UTF8.GetBytes(""); - await emptyStream.WriteAsync(emptyData, 0, emptyData.Length); - request.SetContent(emptyStream); - } - - // 没有bucket则创建 - if (!BucketExists(ossClient, request.Bucket)) - { - ossClient.CreateBucket(request.Bucket); - } - - var aliyunObjectRequest = new PutObjectRequest(request.Bucket, objectName, request.Content) - { - Metadata = new ObjectMetadata() - }; - if (request.ExpirationTime.HasValue) - { - aliyunObjectRequest.Metadata.ExpirationTime = DateTime.Now.Add(request.ExpirationTime.Value); - } - - var aliyunObject = ossClient.PutObject(aliyunObjectRequest); - - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? objectName.Replace(objectPath, "") - : objectName, - objectPath, - aliyunObject.ETag, - DateTime.Now, - aliyunObject.ContentLength, - DateTime.Now, - aliyunObject.ResponseMetadata, - objectName.EndsWith("/") // 名称结尾是 / 符号的则为目录:https://help.aliyun.com/document_detail/31910.html - ) - { - FullName = objectName - }; - - if (!Equals(request.Content, Stream.Null)) - { - request.Content.Seek(0, SeekOrigin.Begin); - ossObject.SetContent(request.Content); - } - - return ossObject; - } - - protected async override Task DeleteBucketAsync(string name) - { - // 阿里云oss在控制台设置即可,无需改变 - var ossClient = await CreateClientAsync(); - - if (!BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - - ossClient.DeleteBucket(name); - } - - public async virtual Task ExpireAsync(ExprieOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - if (BucketExists(ossClient, request.Bucket)) - { - var listObjects = ossClient.ListObjects( - new ListObjectsRequest(request.Bucket) - { - MaxKeys = request.Batch - }); - - var removeKeys = new List(); - foreach (var ossObjectSummary in listObjects.ObjectSummaries) - { - if (ossObjectSummary.LastModified <= request.ExpirationTime) - { - removeKeys.Add(ossObjectSummary.Key); - } - } - - foreach (var removeKey in removeKeys) - { - ossClient.DeleteObject(listObjects.BucketName, removeKey); - } - } - } - - public async override Task DeleteObjectAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (BucketExists(ossClient, request.Bucket) && - ObjectExists(ossClient, request.Bucket, objectName)) - { - var objectListing = ossClient.ListObjects(request.Bucket, objectName); - if (objectListing.CommonPrefixes.Any() || - objectListing.ObjectSummaries.Any()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectDeleteWithNotEmpty); - // throw new ObjectDeleteWithNotEmptyException("00201", $"Can't not delete oss object {request.Object}, because it is not empty!"); - } - ossClient.DeleteObject(request.Bucket, objectName); - } - } - - public async override Task ExistsAsync(string name) - { - var ossClient = await CreateClientAsync(); - - return BucketExists(ossClient, name); - } - - public async override Task GetAsync(string name) - { - var ossClient = await CreateClientAsync(); - if (!BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {name} in aliyun blob storing"); - } - var bucket = ossClient.GetBucketInfo(name); - - return new OssContainer( - bucket.Bucket.Name, - bucket.Bucket.CreationDate, - 0L, - bucket.Bucket.CreationDate, - new Dictionary - { - { "Id", bucket.Bucket.Owner?.Id }, - { "DisplayName", bucket.Bucket.Owner?.DisplayName } - }); - } - - protected async override Task GetOssObjectAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - if (!BucketExists(ossClient, request.Bucket)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {request.Bucket} in aliyun blob storing"); - } - - var objectPath = GetBasePath(request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (!ObjectExists(ossClient, request.Bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - // throw new ContainerNotFoundException($"Can't not found object {objectName} in container {request.Bucket} with aliyun blob storing"); - } - - var aliyunOssObjectRequest = new GetObjectRequest(request.Bucket, objectName, request.Process); - var aliyunOssObject = ossClient.GetObject(aliyunOssObjectRequest); - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? aliyunOssObject.Key.Replace(objectPath, "") - : aliyunOssObject.Key, - request.Path, - aliyunOssObject.Metadata.ETag, - aliyunOssObject.Metadata.LastModified, - aliyunOssObject.Metadata.ContentLength, - aliyunOssObject.Metadata.LastModified, - aliyunOssObject.Metadata.UserMetadata, - aliyunOssObject.Key.EndsWith("/")) - { - FullName = aliyunOssObject.Key - }; - - if (aliyunOssObject.IsSetResponseStream()) - { - ossObject.SetContent(aliyunOssObject.Content); - } - - return ossObject; - } - - public async override Task GetListAsync(GetOssContainersRequest request) - { - var ossClient = await CreateClientAsync(); - - // TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了 - var aliyunRequest = new ListBucketsRequest - { - Marker = request.Marker, - Prefix = request.Prefix, - MaxKeys = request.MaxKeys - }; - var bucketsResponse = ossClient.ListBuckets(aliyunRequest); - - return new GetOssContainersResponse( - bucketsResponse.Prefix, - bucketsResponse.Marker, - bucketsResponse.NextMaker, - bucketsResponse.MaxKeys ?? 0, - bucketsResponse.Buckets - .Select(x => new OssContainer( - x.Name, - x.CreationDate, - 0L, - x.CreationDate, - new Dictionary - { - { "Id", x.Owner?.Id }, - { "DisplayName", x.Owner?.DisplayName } - })) - .ToList()); - } - - public async override Task GetObjectsAsync(GetOssObjectsRequest request) - { - - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Prefix); - var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace() - ? request.Marker.Replace(objectPath, "") - : request.Marker; - - // TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了 - var aliyunRequest = new ListObjectsRequest(request.BucketName) - { - Marker = !marker.IsNullOrWhiteSpace() ? objectPath + marker : marker, - Prefix = objectPath, - MaxKeys = request.MaxKeys, - EncodingType = request.EncodingType, - Delimiter = request.Delimiter - }; - var objectsResponse = ossClient.ListObjects(aliyunRequest); - - var ossObjects = objectsResponse.ObjectSummaries - .Where(x => !x.Key.Equals(objectsResponse.Prefix))// 过滤当前的目录返回值 - .Select(x => new OssObject( - !objectPath.IsNullOrWhiteSpace() && !x.Key.Equals(objectPath) - ? x.Key.Replace(objectPath, "") - : x.Key, // 去除目录名称 - request.Prefix, - x.ETag, - x.LastModified, - x.Size, - x.LastModified, - new Dictionary - { - { "Id", x.Owner?.Id }, - { "DisplayName", x.Owner?.DisplayName } - }, - x.Key.EndsWith("/")) - { - FullName = x.Key - }) - .ToList(); - // 当 Delimiter 为 / 时, objectsResponse.CommonPrefixes 可用于代表层级目录 - if (objectsResponse.CommonPrefixes.Any()) - { - ossObjects.InsertRange(0, - objectsResponse.CommonPrefixes - .Select(x => new OssObject( - x.Replace(objectPath, ""), - request.Prefix, - "", - null, - 0L, - null, - null, - true))); - } - // 排序 - // TODO: 是否需要客户端来排序 - ossObjects.Sort(new OssObjectComparer()); - - return new GetOssObjectsResponse( - objectsResponse.BucketName, - request.Prefix, - marker, - !objectPath.IsNullOrWhiteSpace() && !objectsResponse.NextMarker.IsNullOrWhiteSpace() - ? objectsResponse.NextMarker.Replace(objectPath, "") - : objectsResponse.NextMarker, - objectsResponse.Delimiter, - objectsResponse.MaxKeys, - ossObjects); - } - - protected virtual string GetBasePath(string path) - { - string objectPath = ""; - if (CurrentTenant.Id == null) - { - objectPath += "host/"; - } - else - { - objectPath += "tenants/" + CurrentTenant.Id.Value.ToString("D"); - } - - objectPath += path ?? ""; - - return objectPath.EnsureEndsWith('/'); - } - - protected virtual bool BucketExists(IOss client, string bucketName) - { - return client.DoesBucketExist(bucketName); - } - - protected virtual bool ObjectExists(IOss client, string bucketName, string objectName) - { - return client.DoesObjectExist(bucketName, objectName); - } - - protected async virtual Task CreateClientAsync() - { - return await OssClientFactory.CreateAsync(); - } - - protected override bool ShouldProcessObject(OssObject ossObject) - { - // 阿里云自行处理 - return false; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs deleted file mode 100644 index bae8f5af7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/LINGYUN/Abp/OssManagement/Aliyun/AliyunOssContainerFactory.cs +++ /dev/null @@ -1,35 +0,0 @@ -using LINGYUN.Abp.BlobStoring.Aliyun; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.Aliyun; - -public class AliyunOssContainerFactory : IOssContainerFactory -{ - protected ICurrentTenant CurrentTenant { get; } - protected IOssClientFactory OssClientFactory { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - protected IOptions Options { get; } - - public AliyunOssContainerFactory( - ICurrentTenant currentTenant, - IOssClientFactory ossClientFactory, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - { - Options = options; - ServiceScopeFactory = serviceScopeFactory; - CurrentTenant = currentTenant; - OssClientFactory = ossClientFactory; - } - - public IOssContainer Create() - { - return new AliyunOssContainer( - CurrentTenant, - OssClientFactory, - ServiceScopeFactory, - Options); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunOssContainerServiceCollectionExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunOssContainerServiceCollectionExtensions.cs deleted file mode 100644 index 9f871949f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/Microsoft/Extensions/DependencyInjection/AliyunOssContainerServiceCollectionExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Aliyun; -using System; - -namespace Microsoft.Extensions.DependencyInjection; - -public static class AliyunOssContainerServiceCollectionExtensions -{ - public static IServiceCollection AddAliyunContainer(this IServiceCollection services) - { - services.AddTransient(); - - services.AddTransient(provider => - provider - .GetRequiredService() - .Create() - .As()); - - return services; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.EN.md deleted file mode 100644 index a7282f5e9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.EN.md +++ /dev/null @@ -1,37 +0,0 @@ -# LINGYUN.Abp.OssManagement.Aliyun - -Aliyun OSS container interface implementation - -## Features - -* Implements object storage management based on Aliyun OSS -* Supports basic operations including file upload, download, and deletion -* Supports file sharding upload and breakpoint continuation -* Integrates with Aliyun OSS access control and security mechanisms - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementAliyunModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Configuration Details - -Please refer to Aliyun OSS configuration documentation: [Aliyun OSS Configuration](https://help.aliyun.com/document_detail/32009.html) - -Required configuration items: -* AccessKeyId: Aliyun access key ID -* AccessKeySecret: Aliyun access key secret -* Endpoint: Aliyun OSS access domain -* SecurityToken: Optional security token - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md deleted file mode 100644 index 824a5d9de..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Aliyun/README.md +++ /dev/null @@ -1,37 +0,0 @@ -# LINGYUN.Abp.OssManagement.Aliyun - -阿里云oss容器接口 - -## 功能 - -* 实现基于阿里云OSS的对象存储管理 -* 支持文件上传、下载、删除等基本操作 -* 支持文件分片上传和断点续传 -* 集成阿里云OSS的访问控制和安全机制 - -## 配置使用 - -模块按需引用 - -```csharp -[DependsOn(typeof(AbpOssManagementAliyunModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 配置说明 - -请参考阿里云OSS的配置说明:[阿里云OSS配置](https://help.aliyun.com/document_detail/32009.html) - -需要配置以下关键信息: -* AccessKeyId:阿里云访问密钥ID -* AccessKeySecret:阿里云访问密钥密码 -* Endpoint:阿里云OSS访问域名 -* SecurityToken:可选的安全令牌 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs deleted file mode 100644 index 9b285b9cb..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationContractsModule.cs +++ /dev/null @@ -1,11 +0,0 @@ -using Volo.Abp.Application; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpOssManagementDomainSharedModule), - typeof(AbpDddApplicationContractsModule))] -public class AbpOssManagementApplicationContractsModule : AbpModule -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs deleted file mode 100644 index a2b2a3997..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/BulkDeleteOssObjectInput.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class BulkDeleteOssObjectInput -{ - [Required] - public string Bucket { get; set; } - - public string Path { get; set; } - - [Required] - public string[] Objects { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs deleted file mode 100644 index e4838b96c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/CreateOssObjectInput.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System; -using System.IO; -using Volo.Abp.Auditing; -using Volo.Abp.Content; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -public class CreateOssObjectInput -{ - public string Bucket { get; set; } - public string Path { get; set; } - public string FileName { get; set; } - public bool Overwrite { get; set; } - - [DisableAuditing] - [DisableValidation] - public IRemoteStreamContent File { get; set; } - - public TimeSpan? ExpirationTime { get; set; } - - public void SetContent(Stream content) - { - content.Seek(0, SeekOrigin.Begin); - File = new RemoteStreamContent(content); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareDto.cs deleted file mode 100644 index d26c2f8d1..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareDto.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; - -namespace LINGYUN.Abp.OssManagement; - -public class FileShareDto -{ - public string Url { get; set; } - public int MaxAccessCount { get; set; } - public DateTime? ExpirationTime { get; set; } -} - -public class MyFileShareDto -{ - public string Name { get; set; } - - public string Path { get; set; } - - public string[] Roles { get; set; } - - public string[] Users { get; set; } - - public string MD5 { get; set; } - - public string Url { get; set; } - - public int AccessCount { get; set; } - - public int MaxAccessCount { get; set; } - - public DateTime ExpirationTime { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareInput.cs deleted file mode 100644 index e8cf354e0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/FileShareInput.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class FileShareInput -{ - [Required] - public string Name { get; set; } - - public string Path { get; set; } - - public int MaxAccessCount { get; set; } - - public DateTime? ExpirationTime { get; set; } - - public string[] Roles { get; set; } - - public string[] Users { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileMultiTenancyInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileMultiTenancyInput.cs deleted file mode 100644 index ca4e84de0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileMultiTenancyInput.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System; -using System.Collections.Generic; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement; -public abstract class GetFileMultiTenancyInput -{ - /// - /// 解决通过路由传递租户标识时,abp写入cookies - /// - public string TenantId { get; set; } - - public virtual Guid? GetTenantId(ICurrentTenant currentTenant) - { - if (!TenantId.IsNullOrWhiteSpace()) - { - if ("g".Equals(TenantId, StringComparison.InvariantCultureIgnoreCase)) - { - return null; - } - if ("global".Equals(TenantId, StringComparison.InvariantCultureIgnoreCase)) - { - return null; - } - if (Guid.TryParse(TenantId, out var tenantId)) - { - return tenantId; - } - } - return currentTenant.Id; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileShareDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileShareDto.cs deleted file mode 100644 index c615d4763..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFileShareDto.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.IO; - -namespace LINGYUN.Abp.OssManagement; - -public class GetFileShareDto -{ - public string Name { get; set; } - public Stream Content { get; set; } - public GetFileShareDto( - string name, - Stream content = null) - { - Name = name; - Content = content ?? Stream.Null; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFilesInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFilesInput.cs deleted file mode 100644 index 80df646b7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetFilesInput.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.OssManagement; - -public class GetFilesInput: LimitedResultRequestDto -{ - public string Filter { get; set; } - public string Path { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs deleted file mode 100644 index 6d198fba0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssContainersInput.cs +++ /dev/null @@ -1,9 +0,0 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssContainersInput : PagedAndSortedResultRequestDto -{ - public string Prefix { get; set; } - public string Marker { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs deleted file mode 100644 index f9c92ebbf..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectInput.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssObjectInput -{ - [Required] - public string Bucket { get; set; } - - public string Path { get; set; } - - [Required] - public string Object { get; set; } - - public bool MD5 { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs deleted file mode 100644 index 01c391d1e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetOssObjectsInput.cs +++ /dev/null @@ -1,13 +0,0 @@ -using Volo.Abp.Application.Dtos; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssObjectsInput : PagedAndSortedResultRequestDto -{ - public string Bucket { get; set; } - public string Prefix { get; set; } - public string Delimiter { get; set; } - public string Marker { get; set; } - public string EncodingType { get; set; } - public bool MD5 { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetPublicFileInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetPublicFileInput.cs deleted file mode 100644 index 331a1943f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetPublicFileInput.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class GetPublicFileInput : GetFileMultiTenancyInput -{ - [Required] - public string Name { get; set; } - - public string Path { get; set; } - - public string Process { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs deleted file mode 100644 index 966d5cf4b..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/GetStaticFileInput.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class GetStaticFileInput : GetFileMultiTenancyInput -{ - [Required] - public string Name { get; set; } - - public string Path { get; set; } - - public string Bucket { get; set; } - - public string Process { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs deleted file mode 100644 index 53c394d62..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileUploader.cs +++ /dev/null @@ -1,9 +0,0 @@ -using System.Threading; -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -public interface IFileUploader -{ - Task UploadAsync(UploadFileChunkInput input, CancellationToken cancellationToken = default); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileValidater.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileValidater.cs deleted file mode 100644 index 6e5174b43..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IFileValidater.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -public interface IFileValidater -{ - Task ValidationAsync(UploadFile input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs deleted file mode 100644 index 85617d1e8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssContainerAppService.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.OssManagement; - -public interface IOssContainerAppService: IApplicationService -{ - Task CreateAsync(string name); - - Task GetAsync(string name); - - Task DeleteAsync(string name); - - Task GetListAsync(GetOssContainersInput input); - - Task GetObjectListAsync(GetOssObjectsInput input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs deleted file mode 100644 index d3e427015..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IOssObjectAppService.cs +++ /dev/null @@ -1,35 +0,0 @@ -using System; -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -public interface IOssObjectAppService : IApplicationService -{ - Task CreateAsync(CreateOssObjectInput input); - - Task GetAsync(GetOssObjectInput input); - /// - /// 生成下载链接 - /// - /// - /// 由于a标签无法传递token, 由后端生成一次性下载链接 - /// - /// - /// - Task GenerateUrlAsync(GetOssObjectInput input); - /// - /// 下载文件 - /// - /// 生成的一次性链接key - /// - Task DownloadAsync(string urlKey); - - [Obsolete("请使用 GenerateUrlAsync 与 DownloadAsync的组合")] - Task GetContentAsync(GetOssObjectInput input); - - Task DeleteAsync(GetOssObjectInput input); - - Task BulkDeleteAsync(BulkDeleteOssObjectInput input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPrivateFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPrivateFileAppService.cs deleted file mode 100644 index 52d557ef3..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPrivateFileAppService.cs +++ /dev/null @@ -1,23 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -public interface IPrivateFileAppService : IApplicationService -{ - Task UploadAsync(UploadFileInput input); - - Task GetAsync(GetPublicFileInput input); - - Task> GetListAsync(GetFilesInput input); - - Task UploadChunkAsync(UploadFileChunkInput input); - - Task DeleteAsync(GetPublicFileInput input); - - Task ShareAsync(FileShareInput input); - - Task> GetShareListAsync(); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPublicFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPublicFileAppService.cs deleted file mode 100644 index 5ec854d6c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IPublicFileAppService.cs +++ /dev/null @@ -1,19 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -public interface IPublicFileAppService : IApplicationService -{ - Task UploadAsync(UploadFileInput input); - - Task GetAsync(GetPublicFileInput input); - - Task> GetListAsync(GetFilesInput input); - - Task UploadChunkAsync(UploadFileChunkInput input); - - Task DeleteAsync(GetPublicFileInput input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IShareFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IShareFileAppService.cs deleted file mode 100644 index a84143b5e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IShareFileAppService.cs +++ /dev/null @@ -1,11 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -public interface IShareFileAppService : IApplicationService -{ - Task GetAsync(string url); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs deleted file mode 100644 index bd176c762..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/IStaticFilesAppService.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -public interface IStaticFilesAppService: IApplicationService -{ - Task GetAsync(GetStaticFileInput input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/GetOssObjectExistsResult.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/GetOssObjectExistsResult.cs deleted file mode 100644 index 5e3b63333..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/GetOssObjectExistsResult.cs +++ /dev/null @@ -1,6 +0,0 @@ -namespace LINGYUN.Abp.OssManagement.Integration; - -public class GetOssObjectExistsResult -{ - public bool IsExists { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/IOssObjectIntegrationService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/IOssObjectIntegrationService.cs deleted file mode 100644 index e66b6f240..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Integration/IOssObjectIntegrationService.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Services; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement.Integration; - -[IntegrationService] -public interface IOssObjectIntegrationService : IApplicationService -{ - Task CreateAsync(CreateOssObjectInput input); - - Task DeleteAsync(GetOssObjectInput input); - - Task ExistsAsync(GetOssObjectInput input); - - Task GetAsync(GetOssObjectInput input); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs deleted file mode 100644 index e5466c3e6..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainerDto.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class OssContainerDto -{ - public string Name { get; set; } - public long Size { get; set; } - public DateTime CreationDate { get; set; } - public DateTime? LastModifiedDate { get; set; } - public IDictionary Metadata { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs deleted file mode 100644 index f45014900..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssContainersResultDto.cs +++ /dev/null @@ -1,12 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class OssContainersResultDto -{ - public string Prefix { get; set; } - public string Marker { get; set; } - public string NextMarker { get; set; } - public int MaxKeys { get; set; } - public List Containers { get; set; } = new List(); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs deleted file mode 100644 index 0c918d364..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssManagementRemoteServiceConsts.cs +++ /dev/null @@ -1,8 +0,0 @@ -namespace LINGYUN.Abp.OssManagement; - -public static class OssManagementRemoteServiceConsts -{ - public const string RemoteServiceName = "AbpOssManagement"; - - public const string ModuleName = "oss-management"; -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs deleted file mode 100644 index a33f817c3..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectDto.cs +++ /dev/null @@ -1,16 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectDto -{ - public bool IsFolder { get; set; } - public string Path { get; set; } - public string Name { get; set; } - public long Size { get; set; } - public string MD5 { get; set; } - public DateTime? CreationDate { get; set; } - public DateTime? LastModifiedDate { get; set; } - public IDictionary Metadata { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs deleted file mode 100644 index c6376bdf3..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/OssObjectsResultDto.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectsResultDto -{ - public string Bucket { get; set; } - public string Prefix { get; set; } - public string Delimiter { get; set; } - public string Marker { get; set; } - public string NextMarker { get; set; } - public int MaxKeys { get; set; } - public List Objects { get; set; } = new List(); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs deleted file mode 100644 index 9a4ee6d68..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissionDefinitionProvider.cs +++ /dev/null @@ -1,35 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Localization; -using Volo.Abp.Features; -using LINGYUN.Abp.OssManagement.Features; - -namespace LINGYUN.Abp.OssManagement.Permissions; - -public class AbpOssManagementPermissionDefinitionProvider : PermissionDefinitionProvider -{ - public override void Define(IPermissionDefinitionContext context) - { - var ossManagement = context.AddGroup(AbpOssManagementPermissions.GroupName, L("Permission:OssManagement")); - - var container = ossManagement.AddPermission(AbpOssManagementPermissions.Container.Default, L("Permission:Container")); - container.AddChild(AbpOssManagementPermissions.Container.Create, L("Permission:Create")); - container.AddChild(AbpOssManagementPermissions.Container.Delete, L("Permission:Delete")); - - var ossobject = ossManagement - .AddPermission(AbpOssManagementPermissions.OssObject.Default, L("Permission:OssObject")) - .RequireFeatures(AbpOssManagementFeatureNames.OssObject.Enable); - ossobject - .AddChild(AbpOssManagementPermissions.OssObject.Create, L("Permission:Create")) - .RequireFeatures(AbpOssManagementFeatureNames.OssObject.UploadFile); - ossobject.AddChild(AbpOssManagementPermissions.OssObject.Delete, L("Permission:Delete")); - ossobject - .AddChild(AbpOssManagementPermissions.OssObject.Download, L("Permission:Download")) - .RequireFeatures(AbpOssManagementFeatureNames.OssObject.DownloadFile); - } - - private static LocalizableString L(string name) - { - return LocalizableString.Create(name); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs deleted file mode 100644 index f5c4f6b91..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/Permissions/AbpOssManagementPermissions.cs +++ /dev/null @@ -1,26 +0,0 @@ -namespace LINGYUN.Abp.OssManagement.Permissions; - -public class AbpOssManagementPermissions -{ - public const string GroupName = "AbpOssManagement"; - - public class Container - { - public const string Default = GroupName + ".Container"; - - public const string Create = Default + ".Create"; - - public const string Delete = Default + ".Delete"; - } - - public class OssObject - { - public const string Default = GroupName + ".OssObject"; - - public const string Create = Default + ".Create"; - - public const string Delete = Default + ".Delete"; - - public const string Download = Default + ".Download"; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFile.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFile.cs deleted file mode 100644 index 44cbe862f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFile.cs +++ /dev/null @@ -1,17 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class UploadFile -{ - /// - /// 总文件大小 - /// - [Required] - public long TotalSize { get; set; } - /// - /// 文件名 - /// - [Required] - public string FileName { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs deleted file mode 100644 index d7501958e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/UploadFileInput.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System.ComponentModel.DataAnnotations; -using Volo.Abp.Auditing; -using Volo.Abp.Content; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -public class UploadFileInput -{ - public string Path { get; set; } - public string Object { get; set; } - public bool Overwrite { get; set; } = true; - - [Required] - [DisableAuditing] - [DisableValidation] - public IRemoteStreamContent File { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs deleted file mode 100644 index 235bc2841..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/LINGYUN/Abp/OssManagement/ValidationOssObjectInput.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System.ComponentModel.DataAnnotations; - -namespace LINGYUN.Abp.OssManagement; - -public class ValidationOssObjectInput -{ - /// - /// 总文件大小 - /// - [Required] - public long TotalSize { get; set; } - /// - /// 文件名 - /// - [Required] - public string FileName { get; set; } - /// - /// 容器 - /// - [Required] - public string Bucket { get; set; } - /// - /// 路径 - /// - public string Path { get; set; } - - public bool Overwrite { get; set; } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.EN.md deleted file mode 100644 index cae498e21..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.EN.md +++ /dev/null @@ -1,49 +0,0 @@ -# LINGYUN.Abp.OssManagement.Application.Contracts - -Object Storage Management Application Service Interface Definitions - -## Features - -* Defines application service interfaces for object storage management -* Defines DTO objects for object storage management -* Defines permission management -* Supports management of public files, private files, and shared files - -## Interface Definitions - -### Container Management -* IOssContainerAppService: Container management service interface - * CreateAsync: Create container - * GetAsync: Get container information - * GetListAsync: Get container list - * GetObjectListAsync: Get object list in container - * DeleteAsync: Delete container - -### Object Management -* IOssObjectAppService: Object management service interface - * CreateAsync: Create object - * GetAsync: Get object information - * DeleteAsync: Delete object - * DownloadAsync: Download object - -### File Management -* IFileAppService: Base file service interface -* IPublicFileAppService: Public file service interface -* IPrivateFileAppService: Private file service interface -* IShareFileAppService: Shared file service interface -* IStaticFilesAppService: Static file service interface - -## Permission Definitions - -* AbpOssManagement.Container: Container management permissions - * Create: Create container - * Delete: Delete container -* AbpOssManagement.OssObject: Object management permissions - * Create: Create object - * Delete: Delete object - * Download: Download object - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.md deleted file mode 100644 index a29aa385f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application.Contracts/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# LINGYUN.Abp.OssManagement.Application.Contracts - -对象存储管理应用服务接口定义 - -## 功能 - -* 定义对象存储管理的应用服务接口 -* 定义对象存储管理的DTO对象 -* 定义权限管理 -* 支持公共文件、私有文件和共享文件的管理 - -## 接口定义 - -### 容器管理 -* IOssContainerAppService:容器管理服务接口 - * CreateAsync:创建容器 - * GetAsync:获取容器信息 - * GetListAsync:获取容器列表 - * GetObjectListAsync:获取容器中的对象列表 - * DeleteAsync:删除容器 - -### 对象管理 -* IOssObjectAppService:对象管理服务接口 - * CreateAsync:创建对象 - * GetAsync:获取对象信息 - * DeleteAsync:删除对象 - * DownloadAsync:下载对象 - -### 文件管理 -* IFileAppService:基础文件服务接口 -* IPublicFileAppService:公共文件服务接口 -* IPrivateFileAppService:私有文件服务接口 -* IShareFileAppService:共享文件服务接口 -* IStaticFilesAppService:静态文件服务接口 - -## 权限定义 - -* AbpOssManagement.Container:容器管理权限 - * Create:创建容器 - * Delete:删除容器 -* AbpOssManagement.OssObject:对象管理权限 - * Create:创建对象 - * Delete:删除对象 - * Download:下载对象 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj.user b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj.user deleted file mode 100644 index dc63f8a8b..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN.Abp.OssManagement.Application.csproj.user +++ /dev/null @@ -1,6 +0,0 @@ - - - - false - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs deleted file mode 100644 index a2ca04c3d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/AbpOssManagementApplicationModule.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Application; -using Volo.Abp.Caching; -using Volo.Abp.Mapperly; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpOssManagementDomainModule), - typeof(AbpOssManagementApplicationContractsModule), - typeof(AbpCachingModule), - typeof(AbpMapperlyModule), - typeof(AbpDddApplicationModule))] -public class AbpOssManagementApplicationModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddMapperlyObjectMapper(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs deleted file mode 100644 index dfd2db5c5..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileAppServiceBase.cs +++ /dev/null @@ -1,149 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using LINGYUN.Abp.OssManagement.Features; -using System; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.IO; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.Features; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -public abstract class FileAppServiceBase : OssManagementApplicationServiceBase -{ - protected IFileUploader FileUploader { get; } - protected IFileValidater FileValidater { get; } - protected IOssContainerFactory OssContainerFactory { get; } - - protected FileAppServiceBase( - IFileUploader fileUploader, - IFileValidater fileValidater, - IOssContainerFactory ossContainerFactory) - { - FileUploader = fileUploader; - FileValidater = fileValidater; - OssContainerFactory = ossContainerFactory; - } - - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)] - public async virtual Task UploadChunkAsync(UploadFileChunkInput input) - { - input.Bucket = GetCurrentBucket(); - input.Path = GetCurrentPath(HttpUtility.UrlDecode(input.Path)); - await FileUploader.UploadAsync(input); - } - - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)] - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.UploadLimit, - AbpOssManagementFeatureNames.OssObject.UploadInterval, - LimitPolicy.Month)] - public async virtual Task UploadAsync(UploadFileInput input) - { - if (input.File == null || !input.File.ContentLength.HasValue) - { - ThrowValidationException(L["FileNotBeNullOrEmpty"], "File"); - } - - await FileValidater.ValidationAsync(new UploadFile - { - TotalSize = input.File.ContentLength.Value, - FileName = input.Object - }); - - var oss = OssContainerFactory.Create(); - - var createOssObjectRequest = new CreateOssObjectRequest( - GetCurrentBucket(), - HttpUtility.UrlDecode(input.Object), - input.File.GetStream(), - GetCurrentPath(HttpUtility.UrlDecode(input.Path))) - { - Overwrite = input.Overwrite - }; - - var ossObject = await oss.CreateObjectAsync(createOssObjectRequest); - - return ObjectMapper.Map(ossObject); - } - - public async virtual Task> GetListAsync(GetFilesInput input) - { - var ossContainer = OssContainerFactory.Create(); - var response = await ossContainer.GetObjectsAsync( - GetCurrentBucket(), - GetCurrentPath(HttpUtility.UrlDecode(input.Path)), - skipCount: 0, - maxResultCount: input.MaxResultCount); - - return new ListResultDto( - ObjectMapper.Map, List>(response.Objects)); - } - - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.DownloadFile)] - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.DownloadLimit, - AbpOssManagementFeatureNames.OssObject.DownloadInterval, - LimitPolicy.Month)] - public async virtual Task GetAsync(GetPublicFileInput input) - { - var ossObjectRequest = new GetOssObjectRequest( - GetCurrentBucket(), - // 需要处理特殊字符 - HttpUtility.UrlDecode(input.Name), - GetCurrentPath(HttpUtility.UrlDecode(input.Path)), - HttpUtility.UrlDecode(input.Process)) - { - MD5 = true, - }; - - var ossContainer = OssContainerFactory.Create(); - var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest); - if (ossObject == null || ossObject.Content.IsNullOrEmpty()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - } - - return new RemoteStreamContent(ossObject.Content); - } - - public async virtual Task DeleteAsync(GetPublicFileInput input) - { - var ossContainer = OssContainerFactory.Create(); - - await ossContainer.DeleteObjectAsync( - GetCurrentBucket(), - HttpUtility.UrlDecode(input.Name), - GetCurrentPath(input.Path)); - } - - protected virtual string GetCurrentBucket() - { - throw new System.NotImplementedException(); - } - - protected virtual string GetCurrentPath(string path) - { - if (path.IsNullOrWhiteSpace()) - { - return ""; - } - path = HttpUtility.UrlDecode(path); - path = path.RemovePreFix(".").RemovePreFix("/"); - return path; - } - - private static void ThrowValidationException(string message, string memberName) - { - throw new AbpValidationException(message, - new List - { - new ValidationResult(message, new[] {memberName}) - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileShareCacheItem.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileShareCacheItem.cs deleted file mode 100644 index b46764399..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileShareCacheItem.cs +++ /dev/null @@ -1,95 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace LINGYUN.Abp.OssManagement; - -[Serializable] -public class MyFileShareCacheItem -{ - private const string CacheKeyFormat = "ui:{0}"; - - public List Items { get; set; } - public MyFileShareCacheItem() { } - public MyFileShareCacheItem(List items) - { - Items = items ?? new List(); - } - - public static string CalculateCacheKey(Guid userId) - { - return string.Format(CacheKeyFormat, userId.ToString("N")); - } - - public DateTime? GetLastExpirationTime() - { - if (!Items.Any()) - { - return null; - } - - return Items - .OrderByDescending(item => item.ExpirationTime) - .Select(item => item.ExpirationTime) - .FirstOrDefault(); - } -} - -[Serializable] -public class FileShareCacheItem -{ - private const string CacheKeyFormat = "url:{0}"; - - public string Bucket { get; set; } - - public string Name { get; set; } - - public string Path { get; set; } - - public string[] Roles { get; set; } - - public string[] Users { get; set; } - - public string MD5 { get; set; } - - public string Url { get; set; } - - public int AccessCount { get; set; } - - public int MaxAccessCount { get; set; } - - public DateTime ExpirationTime { get; set; } - - public Guid UserId { get; set; } - - public FileShareCacheItem() { } - - public FileShareCacheItem( - Guid userId, - string bucket, - string name, - string path, - string md5, - string url, - DateTime expirationTime, - string[] roles = null, - string[] users = null, - int maxAccessCount = 0) - { - UserId = userId; - Bucket = bucket; - Name = name; - Path = path; - MD5 = md5; - Url = url; - ExpirationTime = expirationTime; - Roles = roles ?? new string[0]; - Users = users ?? new string[0]; - MaxAccessCount = maxAccessCount; - } - - public static string CalculateCacheKey(string shareUrl) - { - return string.Format(CacheKeyFormat, shareUrl); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs deleted file mode 100644 index fdefe79a5..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploadMerger.cs +++ /dev/null @@ -1,100 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using LINGYUN.Abp.OssManagement.Features; -using LINGYUN.Abp.OssManagement.Localization; -using Microsoft.Extensions.Localization; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Features; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -public class FileUploadMerger : ITransientDependency -{ - private readonly IFileValidater _fileValidater; - private readonly IOssContainerFactory _ossContainerFactory; - private readonly IStringLocalizer _stringLocalizer; - - public FileUploadMerger( - IFileValidater fileValidater, - IOssContainerFactory ossContainerFactory, - IStringLocalizer stringLocalizer) - { - _fileValidater = fileValidater; - _ossContainerFactory = ossContainerFactory; - _stringLocalizer = stringLocalizer; - } - - /// - /// 合并文件 - /// - /// - /// - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.UploadFile)] - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.UploadLimit, - AbpOssManagementFeatureNames.OssObject.UploadInterval, - LimitPolicy.Month)] - public async virtual Task MergeAsync(CreateOssObjectInput input) - { - if (input.File == null || !input.File.ContentLength.HasValue) - { - ThrowValidationException(_stringLocalizer["FileNotBeNullOrEmpty"], "File"); - } - - await _fileValidater.ValidationAsync(new UploadFile - { - TotalSize = input.File.ContentLength.Value, - FileName = input.FileName - }); - - var oss = CreateOssContainer(); - - var createOssObjectRequest = new CreateOssObjectRequest( - input.Bucket, - input.FileName, - input.File.GetStream(), - input.Path, - input.ExpirationTime) - { - Overwrite = input.Overwrite - }; - return await oss.CreateObjectAsync(createOssObjectRequest); - } - - public async virtual Task ValidationAsync(ValidationOssObjectInput input) - { - await _fileValidater.ValidationAsync(new UploadFile - { - TotalSize = input.TotalSize, - FileName = input.FileName - }); - - var oss = CreateOssContainer(); - - if (!input.Overwrite && await oss.ObjectExistsAsync(new GetOssObjectRequest( - input.Bucket, - input.FileName, - input.Path))) - { - throw new BusinessException(OssManagementErrorCodes.ObjectAlreadyExists); - } - } - - protected virtual IOssContainer CreateOssContainer() - { - return _ossContainerFactory.Create(); - } - - private static void ThrowValidationException(string message, string memberName) - { - throw new AbpValidationException(message, - new List - { - new ValidationResult(message, new[] {memberName}) - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs deleted file mode 100644 index 93af01a04..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileUploader.cs +++ /dev/null @@ -1,101 +0,0 @@ -using System; -using System.IO; -using System.Linq; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.IO; - -namespace LINGYUN.Abp.OssManagement; - -public class FileUploader : IFileUploader, ITransientDependency -{ - private readonly FileUploadMerger _fileUploadMerger; - - public FileUploader(FileUploadMerger fileUploadMerger) - { - _fileUploadMerger = fileUploadMerger; - } - - public async virtual Task UploadAsync(UploadFileChunkInput input, CancellationToken cancellationToken = default) - { - await _fileUploadMerger.ValidationAsync(new ValidationOssObjectInput - { - TotalSize = input.TotalSize, - FileName = input.FileName, - Bucket = input.Bucket, - Path = input.Path, - }); - // 以上传的文件名创建一个临时目录 - var tempFilePath = Path.Combine( - Path.GetTempPath(), - "lingyun-abp-application", - "oss-upload-tmp", - string.Concat(input.Path ?? "", input.FileName).ToMd5()); - - try - { - DirectoryHelper.CreateIfNotExists(tempFilePath); - - if (cancellationToken.IsCancellationRequested) - { - // 如果取消请求,删除临时目录 - DirectoryHelper.DeleteIfExists(tempFilePath, true); - return; - } - - // 以上传的分片索引创建临时文件 - var tempSavedFile = Path.Combine(tempFilePath, $"{input.ChunkNumber}.upd"); - if (input.File != null) - { - // 保存临时文件 - using (var fs = new FileStream(tempSavedFile, FileMode.Create, FileAccess.Write)) - { - // 写入当前分片文件 - await input.File.GetStream().CopyToAsync(fs); - } - } - - if (input.ChunkNumber == input.TotalChunks) - { - var mergeTmpFile = Path.Combine(tempFilePath, input.FileName); - // 创建临时合并文件流 - using (var mergeFileStream = new FileStream(mergeTmpFile, FileMode.Create, FileAccess.ReadWrite)) - { - var createOssObjectInput = new CreateOssObjectInput - { - Bucket = input.Bucket, - Path = input.Path, - FileName = input.FileName - }; - // 合并文件 - var mergeSavedFile = Path.Combine(tempFilePath, $"{input.FileName}"); - // 获取并排序所有分片文件 - var mergeFiles = Directory.GetFiles(tempFilePath, "*.upd").OrderBy(f => f.Length).ThenBy(f => f); - // 创建临时合并文件 - foreach (var mergeFile in mergeFiles) - { - // 读取当前文件字节 - var mergeFileBytes = await FileHelper.ReadAllBytesAsync(mergeFile); - // 写入到合并文件流 - await mergeFileStream.WriteAsync(mergeFileBytes, 0, mergeFileBytes.Length, cancellationToken); - Array.Clear(mergeFileBytes, 0, mergeFileBytes.Length); - // 删除已参与合并的临时文件分片 - FileHelper.DeleteIfExists(mergeFile); - } - createOssObjectInput.SetContent(mergeFileStream); - // 分离出合并接口,合并时计算上传次数 - await _fileUploadMerger.MergeAsync(createOssObjectInput); - } - // 文件保存之后删除临时文件目录 - DirectoryHelper.DeleteIfExists(tempFilePath, true); - } - } - catch - { - // 发生异常删除临时文件目录 - DirectoryHelper.DeleteIfExists(tempFilePath, true); - throw; - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileValidater.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileValidater.cs deleted file mode 100644 index 059d09e43..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/FileValidater.cs +++ /dev/null @@ -1,95 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using LINGYUN.Abp.OssManagement.Settings; -using Microsoft.Extensions.Caching.Memory; -using Microsoft.Extensions.Localization; -using System; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.DependencyInjection; -using Volo.Abp.IO; -using Volo.Abp.Settings; - -namespace LINGYUN.Abp.OssManagement; - -public class FileValidater : IFileValidater, ISingletonDependency -{ - private readonly IMemoryCache _cache; - private readonly ISettingProvider _settingProvider; - private readonly IServiceProvider _serviceProvider; - private readonly IStringLocalizer _stringLocalizer; - - public FileValidater( - IMemoryCache cache, - ISettingProvider settingProvider, - IServiceProvider serviceProvider, - IStringLocalizer stringLocalizer) - { - _cache = cache; - _settingProvider = settingProvider; - _serviceProvider = serviceProvider; - _stringLocalizer = stringLocalizer; - } - - public async virtual Task ValidationAsync(UploadFile input) - { - var validation = await GetByCacheItemAsync(); - if (validation.SizeLimit * 1024 * 1024 < input.TotalSize) - { - throw new UserFriendlyException(_stringLocalizer["UploadFileSizeBeyondLimit", validation.SizeLimit]); - } - var fileExtensionName = FileHelper.GetExtension(input.FileName); - if (!validation.AllowedExtensions - .Any(fe => fe.Equals(fileExtensionName, StringComparison.CurrentCultureIgnoreCase))) - { - throw new UserFriendlyException(_stringLocalizer["NotAllowedFileExtensionName", fileExtensionName]); - } - } - - protected async virtual Task GetByCacheItemAsync() - { - var fileValidation = _cache.Get(FileValidation.CacheKey); - if (fileValidation == null) - { - fileValidation = await GetBySettingAsync(); - _cache.Set(FileValidation.CacheKey, - fileValidation, - new MemoryCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.AddMinutes(2) - }); - } - return fileValidation; - } - - protected async virtual Task GetBySettingAsync() - { - var fileSizeLimited = await _settingProvider - .GetAsync( - AbpOssManagementSettingNames.FileLimitLength, - AbpOssManagementSettingNames.DefaultFileLimitLength); - var fileAllowExtension = await _settingProvider - .GetOrDefaultAsync(AbpOssManagementSettingNames.AllowFileExtensions, _serviceProvider); - - return new FileValidation(fileSizeLimited, fileAllowExtension.Split(',')); - } -} - -public class FileValidation -{ - public const string CacheKey = "Abp.OssManagement.FileValidation"; - public long SizeLimit { get; set; } - public string[] AllowedExtensions { get; set; } - public FileValidation() - { - - } - - public FileValidation( - long sizeLimit, - string[] allowedExtensions) - { - SizeLimit = sizeLimit; - AllowedExtensions = allowedExtensions; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationService.cs deleted file mode 100644 index 1c4ec170d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationService.cs +++ /dev/null @@ -1,94 +0,0 @@ -using System; -using System.IO; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement.Integration; - -public class OssObjectIntegrationService : OssManagementApplicationServiceBase, IOssObjectIntegrationService -{ - protected FileUploadMerger Merger { get; } - protected IOssContainerFactory OssContainerFactory { get; } - - public OssObjectIntegrationService( - FileUploadMerger merger, - IOssContainerFactory ossContainerFactory) - { - Merger = merger; - OssContainerFactory = ossContainerFactory; - } - - public async virtual Task CreateAsync(CreateOssObjectInput input) - { - // 内容为空时建立目录 - if (input.File == null || !input.File.ContentLength.HasValue) - { - var oss = CreateOssContainer(); - var request = new CreateOssObjectRequest( - HttpUtility.UrlDecode(input.Bucket), - HttpUtility.UrlDecode(input.FileName), - Stream.Null, - HttpUtility.UrlDecode(input.Path)); - var ossObject = await oss.CreateObjectAsync(request); - - return ObjectMapper.Map(ossObject); - } - else - { - var ossObject = await Merger.MergeAsync(input); - - return ObjectMapper.Map(ossObject); - } - } - - public async virtual Task DeleteAsync(GetOssObjectInput input) - { - var oss = CreateOssContainer(); - - await oss.DeleteObjectAsync(input.Bucket, input.Object, input.Path); - } - - public async virtual Task ExistsAsync(GetOssObjectInput input) - { - try - { - var oss = CreateOssContainer(); - - var ossObject = await oss.GetObjectAsync(input.Bucket, input.Object, input.Path, input.MD5); - - return new GetOssObjectExistsResult - { - IsExists = ossObject != null - }; - } - catch (Exception) - { - return new GetOssObjectExistsResult - { - IsExists = false, - }; - } - } - - public async virtual Task GetAsync(GetOssObjectInput input) - { - try - { - var oss = CreateOssContainer(); - - var ossObject = await oss.GetObjectAsync(input.Bucket, input.Object, input.Path, input.MD5); - - return new RemoteStreamContent(ossObject.Content, ossObject.Name); - } - catch (Exception) - { - return new RemoteStreamContent(Stream.Null); - } - } - - protected virtual IOssContainer CreateOssContainer() - { - return OssContainerFactory.Create(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs deleted file mode 100644 index 0409d4662..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssContainerAppService.cs +++ /dev/null @@ -1,69 +0,0 @@ -using LINGYUN.Abp.OssManagement.Permissions; -using Microsoft.AspNetCore.Authorization; -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -[Authorize(AbpOssManagementPermissions.Container.Default)] -public class OssContainerAppService : OssManagementApplicationServiceBase, IOssContainerAppService -{ - protected IOssContainerFactory OssContainerFactory { get; } - - public OssContainerAppService( - IOssContainerFactory ossContainerFactory) - { - OssContainerFactory = ossContainerFactory; - } - - [Authorize(AbpOssManagementPermissions.Container.Create)] - public async virtual Task CreateAsync(string name) - { - var oss = CreateOssContainer(); - var container = await oss.CreateAsync(name); - - return ObjectMapper.Map(container); - } - - [Authorize(AbpOssManagementPermissions.Container.Delete)] - public async virtual Task DeleteAsync(string name) - { - var oss = CreateOssContainer(); - - await oss.DeleteAsync(name); - } - - public async virtual Task GetAsync(string name) - { - var oss = CreateOssContainer(); - var container = await oss.GetAsync(name); - - return ObjectMapper.Map(container); - } - - public async virtual Task GetListAsync(GetOssContainersInput input) - { - var oss = CreateOssContainer(); - - var containerResponse = await oss.GetListAsync( - input.Prefix, input.Marker, input.SkipCount, input.MaxResultCount); - - return ObjectMapper.Map(containerResponse); - } - - public async virtual Task GetObjectListAsync(GetOssObjectsInput input) - { - var oss = CreateOssContainer(); - - var ossObjectResponse = await oss.GetObjectsAsync( - input.Bucket, input.Prefix, input.Marker, - input.Delimiter, input.EncodingType, input.MD5, - input.SkipCount, input.MaxResultCount); - - return ObjectMapper.Map(ossObjectResponse); - } - - protected virtual IOssContainer CreateOssContainer() - { - return OssContainerFactory.Create(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationMappers.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationMappers.cs deleted file mode 100644 index c77419b1d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationMappers.cs +++ /dev/null @@ -1,76 +0,0 @@ -using Riok.Mapperly.Abstractions; -using System; -using System.Collections.Generic; -using System.Linq; -using System.Runtime.ConstrainedExecution; -using Volo.Abp.Mapperly; - -namespace LINGYUN.Abp.OssManagement; - -[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] -public partial class OssContainerToOssContainerDtoMapper : MapperBase -{ - public override partial OssContainerDto Map(OssContainer source); - public override partial void Map(OssContainer source, OssContainerDto destination); -} - -[Mapper] -public partial class OssObjectToOssObjectDtoMapper : MapperBase -{ - [MapperIgnoreSource(nameof(OssObject.Content))] - [MapperIgnoreSource(nameof(OssObject.FullName))] - [MapProperty(nameof(OssObject.Prefix), nameof(OssObjectDto.Path))] - public override partial OssObjectDto Map(OssObject source); - - [MapperIgnoreSource(nameof(OssObject.Content))] - [MapperIgnoreSource(nameof(OssObject.FullName))] - [MapProperty(nameof(OssObject.Prefix), nameof(OssObjectDto.Path))] - public override partial void Map(OssObject source, OssObjectDto destination); -} - -[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] -public partial class GetOssContainersResponseToOssContainersResultDtoMapper : MapperBase -{ - public override partial OssContainersResultDto Map(GetOssContainersResponse source); - public override partial void Map(GetOssContainersResponse source, OssContainersResultDto destination); -} - -[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] -public partial class GetOssObjectsResponseToOssObjectsResultDtoMapper : MapperBase -{ - private readonly OssObjectToOssObjectDtoMapper _ossObjectMapper; - - public GetOssObjectsResponseToOssObjectsResultDtoMapper(OssObjectToOssObjectDtoMapper ossObjectMapper) - { - _ossObjectMapper = ossObjectMapper; - } - - [MapperIgnoreTarget(nameof(GetOssObjectsResponse.Objects))] - public override partial OssObjectsResultDto Map(GetOssObjectsResponse source); - - [MapperIgnoreTarget(nameof(GetOssObjectsResponse.Objects))] - public override partial void Map(GetOssObjectsResponse source, OssObjectsResultDto destination); - - public override void AfterMap(GetOssObjectsResponse source, OssObjectsResultDto destination) - { - if (source.Objects != null) - { - destination.Objects ??= new List(); - destination.Objects.Clear(); - - foreach (var ossObject in source.Objects) - { - var ossObjectDto = _ossObjectMapper.Map(ossObject); - _ossObjectMapper.AfterMap(ossObject, ossObjectDto); - destination.Objects.Add(ossObjectDto); - } - } - } -} - -[Mapper(RequiredMappingStrategy = RequiredMappingStrategy.Target)] -public partial class FileShareCacheItemToMyFileShareDtoMapper : MapperBase -{ - public override partial MyFileShareDto Map(FileShareCacheItem source); - public override partial void Map(FileShareCacheItem source, MyFileShareDto destination); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs deleted file mode 100644 index 8ef480f84..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssManagementApplicationServiceBase.cs +++ /dev/null @@ -1,13 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Volo.Abp.Application.Services; - -namespace LINGYUN.Abp.OssManagement; - -public abstract class OssManagementApplicationServiceBase : ApplicationService -{ - protected OssManagementApplicationServiceBase() - { - LocalizationResource = typeof(AbpOssManagementResource); - ObjectMapperContext = typeof(AbpOssManagementApplicationModule); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs deleted file mode 100644 index 7d1795ac7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectAppService.cs +++ /dev/null @@ -1,129 +0,0 @@ -using LINGYUN.Abp.OssManagement.Permissions; -using Microsoft.AspNetCore.Authorization; -using System; -using System.IO; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp; -using Volo.Abp.Caching; -using Volo.Abp.Content; -using Volo.Abp.Json; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectAppService : OssManagementApplicationServiceBase, IOssObjectAppService -{ - protected FileUploadMerger Merger { get; } - protected IOssContainerFactory OssContainerFactory { get; } - protected IDistributedCache UrlCache { get; } - protected IJsonSerializer JsonSerializer { get; } - - public OssObjectAppService( - FileUploadMerger merger, - IJsonSerializer jsonSerializer, - IOssContainerFactory ossContainerFactory, - IDistributedCache urlCache) - { - Merger = merger; - JsonSerializer = jsonSerializer; - OssContainerFactory = ossContainerFactory; - UrlCache = urlCache; - } - - [Authorize(AbpOssManagementPermissions.OssObject.Create)] - public async virtual Task CreateAsync(CreateOssObjectInput input) - { - // 内容为空时建立目录 - if (input.File == null || !input.File.ContentLength.HasValue) - { - var oss = CreateOssContainer(); - var request = new CreateOssObjectRequest( - HttpUtility.UrlDecode(input.Bucket), - HttpUtility.UrlDecode(input.FileName), - Stream.Null, - HttpUtility.UrlDecode(input.Path)); - var ossObject = await oss.CreateObjectAsync(request); - - return ObjectMapper.Map(ossObject); - } - else - { - var ossObject = await Merger.MergeAsync(input); - - return ObjectMapper.Map(ossObject); - } - } - - [Authorize(AbpOssManagementPermissions.OssObject.Delete)] - public async virtual Task BulkDeleteAsync(BulkDeleteOssObjectInput input) - { - var oss = CreateOssContainer(); - - await oss.BulkDeleteObjectsAsync(input.Bucket, input.Objects, input.Path); - } - - [Authorize(AbpOssManagementPermissions.OssObject.Delete)] - public async virtual Task DeleteAsync(GetOssObjectInput input) - { - var oss = CreateOssContainer(); - - await oss.DeleteObjectAsync(input.Bucket, input.Object, input.Path); - } - - [Authorize(AbpOssManagementPermissions.OssObject.Default)] - public async virtual Task GetAsync(GetOssObjectInput input) - { - var oss = CreateOssContainer(); - - var ossObject = await oss.GetObjectAsync(input.Bucket, input.Object, input.Path, input.MD5); - - return ObjectMapper.Map(ossObject); - } - - [Authorize(AbpOssManagementPermissions.OssObject.Download)] - public async virtual Task GetContentAsync(GetOssObjectInput input) - { - var oss = CreateOssContainer(); - - var ossObject = await oss.GetObjectAsync(input.Bucket, input.Object, input.Path, input.MD5); - - return new RemoteStreamContent(ossObject.Content, ossObject.Name); - } - - protected virtual IOssContainer CreateOssContainer() - { - return OssContainerFactory.Create(); - } - - [Authorize(AbpOssManagementPermissions.OssObject.Download)] - public async virtual Task GenerateUrlAsync(GetOssObjectInput input) - { - // 以当前时间戳为盐, 尽量避免同一文件相同的url - var salt = Clock.Now.Ticks.ToString(); - var cacheKey = $"{JsonSerializer.Serialize(input)}{salt}".ToMd5(); - var cacheItem = await UrlCache.GetAsync(cacheKey); - if (cacheItem == null) - { - var url = $"/api/oss-management/objects/download/{cacheKey}"; - cacheItem = new OssObjectUrlCacheItem(url, input.Bucket, input.Path, input.Object); - - await UrlCache.SetAsync(cacheKey, cacheItem); - } - - return cacheItem.Url; - } - - public async virtual Task DownloadAsync(string urlKey) - { - var cacheItem = await UrlCache.GetAsync(urlKey) ?? - throw new BusinessException(OssManagementErrorCodes.ObjectUrlKeyHasExpired); - - await UrlCache.RemoveAsync(urlKey); - - var oss = CreateOssContainer(); - - var ossObject = await oss.GetObjectAsync(cacheItem.Bucket, cacheItem.Object, cacheItem.Path); - - return new RemoteStreamContent(ossObject.Content, ossObject.Name); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectUrlCacheItem.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectUrlCacheItem.cs deleted file mode 100644 index f7d25795e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/OssObjectUrlCacheItem.cs +++ /dev/null @@ -1,24 +0,0 @@ -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectUrlCacheItem -{ - public string Url { get; set; } - - public string Bucket { get; set; } - - public string Path { get; set; } - - public string Object { get; set; } - public OssObjectUrlCacheItem() - { - - } - - public OssObjectUrlCacheItem(string url, string bucket, string path, string @object) - { - Url = url; - Bucket = bucket; - Path = path; - Object = @object; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs deleted file mode 100644 index 9dd60a2ef..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PrivateFileAppService.cs +++ /dev/null @@ -1,235 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using LINGYUN.Abp.OssManagement.Features; -using Microsoft.AspNetCore.Authorization; -using Microsoft.Extensions.Caching.Distributed; -using System; -using System.Collections.Generic; -using System.IO; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Caching; -using Volo.Abp.Content; -using Volo.Abp.Features; -using Volo.Abp.IO; -using Volo.Abp.Users; - -namespace LINGYUN.Abp.OssManagement; - -/// -/// 所有登录用户访问私有文件服务接口 -/// bucket限制在users -/// path限制在用户id -/// -[Authorize] -// 不对外公开,仅通过控制器调用 -//[RemoteService(IsMetadataEnabled = false)] -public class PrivateFileAppService : FileAppServiceBase, IPrivateFileAppService -{ - private readonly IDistributedCache _shareCache; - private readonly IDistributedCache _myShareCache; - public PrivateFileAppService( - IDistributedCache shareCache, - IDistributedCache myShareCache, - IFileUploader fileUploader, - IFileValidater fileValidater, - IOssContainerFactory ossContainerFactory) - : base(fileUploader, fileValidater, ossContainerFactory) - { - _shareCache = shareCache; - _myShareCache = myShareCache; - } - - [Authorize] - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.DownloadFile)] - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.DownloadLimit, - AbpOssManagementFeatureNames.OssObject.DownloadInterval, - LimitPolicy.Month)] - public override async Task GetAsync(GetPublicFileInput input) - { - var ossObjectRequest = new GetOssObjectRequest( - GetCurrentBucket(), - // 需要处理特殊字符 - HttpUtility.UrlDecode(input.Name), - GetCurrentPath(HttpUtility.UrlDecode(input.Path)), - HttpUtility.UrlDecode(input.Process)) - { - MD5 = true, - // TODO: 用户访问自身目录可以实现无限制创建目录层级? - CreatePathIsNotExists = true, - }; - - var ossContainer = OssContainerFactory.Create(); - var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest); - if (ossObject == null || ossObject.Content.IsNullOrEmpty()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - } - - return new RemoteStreamContent(ossObject.Content); - } - - [Authorize] - public override async Task> GetListAsync(GetFilesInput input) - { - var ossContainer = OssContainerFactory.Create(); - var response = await ossContainer.GetObjectsAsync( - GetCurrentBucket(), - GetCurrentPath(HttpUtility.UrlDecode(input.Path)), - skipCount: 0, - maxResultCount: input.MaxResultCount, - createPathIsNotExists: true); // TODO: 用户访问自身目录可以实现无限制创建目录层级? - - return new ListResultDto( - ObjectMapper.Map, List>(response.Objects)); - } - - [Authorize] - public override async Task UploadAsync(UploadFileInput input) - { - return await base.UploadAsync(input); - } - - [Authorize] - public override async Task UploadChunkAsync(UploadFileChunkInput input) - { - await base.UploadChunkAsync(input); - } - - [Authorize] - public async virtual Task> GetShareListAsync() - { - if (!await FeatureChecker.IsEnabledAsync(AbpOssManagementFeatureNames.OssObject.AllowSharedFile)) - { - return new ListResultDto(); - } - - var cacheKey = MyFileShareCacheItem.CalculateCacheKey(CurrentUser.GetId()); - var cacheItem = await _myShareCache.GetAsync(cacheKey); - if (cacheItem == null) - { - return new ListResultDto(); - } - - // 被动刷新用户共享缓存 - // 手动调用时清除一下应该被清理掉的缓存 - cacheItem.Items.RemoveAll(items => items.MaxAccessCount > 0 && items.AccessCount > items.MaxAccessCount); - cacheItem.Items.RemoveAll(items => items.ExpirationTime < Clock.Now); - - DistributedCacheEntryOptions cacheOptions = null; - var myShareCacheExpirationTime = cacheItem.GetLastExpirationTime(); - if (myShareCacheExpirationTime.HasValue) - { - cacheOptions = new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.Add( - Clock.Normalize(myShareCacheExpirationTime.Value) - Clock.Now), - }; - } - await _myShareCache.SetAsync(cacheKey, cacheItem, cacheOptions); - - return new ListResultDto( - ObjectMapper.Map, List>(cacheItem.Items)); - } - - [Authorize] - public async virtual Task ShareAsync(FileShareInput input) - { - await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.OssObject.AllowSharedFile); - - var ossObjectRequest = new GetOssObjectRequest( - GetCurrentBucket(), - // 需要处理特殊字符 - HttpUtility.UrlDecode(input.Name), - GetCurrentPath(HttpUtility.UrlDecode(input.Path))) - { - MD5 = true, - }; - var ossContainer = OssContainerFactory.Create(); - var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest); - - var shareUrl = $"{GuidGenerator.Create():N}.{FileHelper.GetExtension(ossObject.Name)}"; - var cacheItem = new FileShareCacheItem( - CurrentUser.GetId(), - GetCurrentBucket(), - ossObject.Name, - ossObject.Prefix, - ossObject.MD5, - shareUrl, - input.ExpirationTime ?? Clock.Now.AddDays(7), - input.Roles, - input.Users, - input.MaxAccessCount); - - var cacheOptions = new DistributedCacheEntryOptions - { - // 不传递过期时间, 默认7天 - AbsoluteExpiration = DateTimeOffset.Now.Add( - Clock.Normalize(cacheItem.ExpirationTime) - Clock.Now), - }; - - await _shareCache.SetAsync( - FileShareCacheItem.CalculateCacheKey(shareUrl), - cacheItem, - cacheOptions); - - #region 当前用户共享缓存 - - // 被动刷新用户共享缓存 - var myShareCacheKey = MyFileShareCacheItem.CalculateCacheKey(CurrentUser.GetId()); - var myShareCacheItem = await _myShareCache.GetAsync(myShareCacheKey); - if (myShareCacheItem == null) - { - myShareCacheItem = new MyFileShareCacheItem( - new List() { cacheItem }); - } - else - { - myShareCacheItem.Items.Add(cacheItem); - } - DistributedCacheEntryOptions myShareCacheOptions = null; - var myShareCacheExpirationTime = myShareCacheItem.GetLastExpirationTime(); - if (myShareCacheExpirationTime.HasValue) - { - myShareCacheOptions = new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.Add( - Clock.Normalize(myShareCacheExpirationTime.Value) - Clock.Now), - }; - } - await _myShareCache.SetAsync(myShareCacheKey, myShareCacheItem, myShareCacheOptions); - - #endregion - - return new FileShareDto - { - Url = shareUrl, - MaxAccessCount = input.MaxAccessCount, - ExpirationTime = input.ExpirationTime, - }; - } - - [Authorize] - public override async Task DeleteAsync(GetPublicFileInput input) - { - await base.DeleteAsync(input); - } - - protected override string GetCurrentBucket() - { - return "users"; - } - - protected override string GetCurrentPath(string path) - { - path = base.GetCurrentPath(path); - var userId = CurrentUser.GetId().ToString("N"); - if (path.IsNullOrWhiteSpace()) - { - return userId; - } - return path.StartsWith(userId) ? path : $"{userId}/{path}"; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs deleted file mode 100644 index 99929c2e0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/PublicFileAppService.cs +++ /dev/null @@ -1,85 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using LINGYUN.Abp.OssManagement.Features; -using LINGYUN.Abp.OssManagement.Permissions; -using Microsoft.AspNetCore.Authorization; -using System.Threading.Tasks; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.Features; - -namespace LINGYUN.Abp.OssManagement; - -[AllowAnonymous] -public class PublicFileAppService : FileAppServiceBase, IPublicFileAppService -{ - public PublicFileAppService( - IFileUploader fileUploader, - IFileValidater fileValidater, - IOssContainerFactory ossContainerFactory) - : base(fileUploader, fileValidater, ossContainerFactory) - { - } - - [Authorize(AbpOssManagementPermissions.OssObject.Delete)] - public override async Task DeleteAsync(GetPublicFileInput input) - { - await CheckPublicAccessAsync(); - - await base.DeleteAsync(input); - } - - public override async Task UploadChunkAsync(UploadFileChunkInput input) - { - await CheckPublicAccessAsync(); - await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.OssObject.UploadFile); - - await base.UploadChunkAsync(input); - } - - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.UploadLimit, - AbpOssManagementFeatureNames.OssObject.UploadInterval, - LimitPolicy.Month)] - public override async Task UploadAsync(UploadFileInput input) - { - await CheckPublicAccessAsync(); - await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.OssObject.UploadFile); - - // 公共目录不允许覆盖 - input.Overwrite = false; - - return await base.UploadAsync(input); - } - - public override async Task> GetListAsync(GetFilesInput input) - { - await CheckPublicAccessAsync(); - - return await base.GetListAsync(input); - } - - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.DownloadLimit, - AbpOssManagementFeatureNames.OssObject.DownloadInterval, - LimitPolicy.Month)] - public override async Task GetAsync(GetPublicFileInput input) - { - await CheckPublicAccessAsync(); - await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.OssObject.DownloadFile); - - return await base.GetAsync(input); - } - - protected override string GetCurrentBucket() - { - return "public"; - } - - protected async virtual Task CheckPublicAccessAsync() - { - if (!CurrentUser.IsAuthenticated) - { - await FeatureChecker.CheckEnabledAsync(AbpOssManagementFeatureNames.PublicAccess); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/ShareFileAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/ShareFileAppService.cs deleted file mode 100644 index 09179c8eb..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/ShareFileAppService.cs +++ /dev/null @@ -1,126 +0,0 @@ -using LINGYUN.Abp.OssManagement.Features; -using Microsoft.Extensions.Caching.Distributed; -using System; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Caching; -using Volo.Abp.Content; -using Volo.Abp.Http; - -namespace LINGYUN.Abp.OssManagement; - -public class ShareFileAppService : OssManagementApplicationServiceBase, IShareFileAppService -{ - private readonly IDistributedCache _shareCache; - private readonly IDistributedCache _myShareCache; - private readonly IOssContainerFactory _ossContainerFactory; - - public ShareFileAppService( - IDistributedCache shareCache, - IDistributedCache myShareCache, - IOssContainerFactory ossContainerFactory) - { - _shareCache = shareCache; - _myShareCache = myShareCache; - _ossContainerFactory = ossContainerFactory; - } - - public async virtual Task GetAsync(string url) - { - if (!await FeatureChecker.IsEnabledAsync(AbpOssManagementFeatureNames.OssObject.AllowSharedFile)) - { - return new RemoteStreamContent(Stream.Null); - } - var cacheKey = FileShareCacheItem.CalculateCacheKey(url); - var cacheItem = await _shareCache.GetAsync(cacheKey); - if (cacheItem == null) - { - return new RemoteStreamContent(Stream.Null); - } - - // 最大访问次数 - cacheItem.AccessCount += 1; - - // 被动刷新用户共享缓存 - await RefreshUserShareAsync(cacheItem); - - if (cacheItem.MaxAccessCount > 0 && cacheItem.AccessCount > cacheItem.MaxAccessCount) - { - await _shareCache.RemoveAsync(cacheKey); - - return new RemoteStreamContent(Stream.Null); - } - - // 共享用户 - if (cacheItem.Users != null && cacheItem.Users.Any()) - { - if (cacheItem.Users.Any((userName) => !userName.Equals(CurrentUser.UserName))) - { - return new RemoteStreamContent(Stream.Null); - } - } - - // 共享角色 - if (cacheItem.Roles != null && cacheItem.Roles.Any()) - { - if (cacheItem.Roles.Any((role) => !CurrentUser.Roles.Contains(role))) - { - return new RemoteStreamContent(Stream.Null); - } - } - - var ossObjectRequest = new GetOssObjectRequest( - cacheItem.Bucket, - cacheItem.Name, - cacheItem.Path) - { - MD5 = true, - }; - - var ossContainer = _ossContainerFactory.Create(); - var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest); - - var cacheOptions = new DistributedCacheEntryOptions - { - // 不传递过期时间, 默认7天 - AbsoluteExpiration = DateTimeOffset.Now.Add( - Clock.Normalize(cacheItem.ExpirationTime) - Clock.Now), - }; - // 改变共享次数 - await _shareCache.SetAsync( - cacheKey, - cacheItem, - cacheOptions); - - return new RemoteStreamContent(ossObject.Content, ossObject.Name, MimeTypes.GetByExtension(ossObject.Name), ossObject.Size); - } - - protected async virtual Task RefreshUserShareAsync(FileShareCacheItem shareCacheItem) - { - // 清除当前用户共享缓存 - var myShareCacheKey = MyFileShareCacheItem.CalculateCacheKey(shareCacheItem.UserId); - var myShareCacheItem = await _myShareCache.GetAsync(myShareCacheKey); - if (myShareCacheItem != null) - { - myShareCacheItem.Items.RemoveAll(item => item.Url.Equals(shareCacheItem.Url)); - if (shareCacheItem.MaxAccessCount == 0 || shareCacheItem.AccessCount < shareCacheItem.MaxAccessCount) - { - myShareCacheItem.Items.Add(shareCacheItem); - } - - DistributedCacheEntryOptions myShareCacheOptions = null; - var myShareCacheExpirationTime = myShareCacheItem.GetLastExpirationTime(); - if (myShareCacheExpirationTime.HasValue) - { - myShareCacheOptions = new DistributedCacheEntryOptions - { - AbsoluteExpiration = DateTimeOffset.Now.Add( - Clock.Normalize(myShareCacheExpirationTime.Value) - Clock.Now), - }; - } - - await _myShareCache.SetAsync(myShareCacheKey, myShareCacheItem, myShareCacheOptions); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs deleted file mode 100644 index accc38261..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/LINGYUN/Abp/OssManagement/StaticFilesAppService.cs +++ /dev/null @@ -1,47 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using LINGYUN.Abp.OssManagement.Features; -using System.IO; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp; -using Volo.Abp.Content; -using Volo.Abp.Features; - -namespace LINGYUN.Abp.OssManagement; - -public class StaticFilesAppService : OssManagementApplicationServiceBase, IStaticFilesAppService -{ - protected IOssContainerFactory OssContainerFactory { get; } - - public StaticFilesAppService( - IOssContainerFactory ossContainerFactory) - { - OssContainerFactory = ossContainerFactory; - } - - [RequiresFeature(AbpOssManagementFeatureNames.OssObject.DownloadFile)] - [RequiresLimitFeature( - AbpOssManagementFeatureNames.OssObject.DownloadLimit, - AbpOssManagementFeatureNames.OssObject.DownloadInterval, - LimitPolicy.Month)] - public async virtual Task GetAsync(GetStaticFileInput input) - { - var ossObjectRequest = new GetOssObjectRequest( - HttpUtility.UrlDecode(input.Bucket), // 需要处理特殊字符 - HttpUtility.UrlDecode(input.Name), - HttpUtility.UrlDecode(input.Path), - HttpUtility.UrlDecode(input.Process)) - { - MD5 = true, - }; - - var ossContainer = OssContainerFactory.Create(); - var ossObject = await ossContainer.GetObjectAsync(ossObjectRequest); - if (ossObject == null || ossObject.Content.IsNullOrEmpty()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - } - - return new RemoteStreamContent(ossObject.Content, ossObject.Name); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.EN.md deleted file mode 100644 index 6c9031688..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.EN.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.Application - -Object Storage Management Application Service Implementation - -## Features - -* Implements application service interfaces for object storage management -* Provides concrete implementations for container management, object management, and file management -* Supports file upload, download, and sharing functionality -* Implements permission validation and access control - -## Service Implementations - -### Base Services -* FileAppServiceBase: File service base class, implements IFileAppService interface -* OssManagementApplicationServiceBase: OSS management application service base class - -### Container Management -* OssContainerAppService: Implements IOssContainerAppService interface - * Provides container creation, query, and deletion functionality - * Supports paginated container list queries - * Supports object list queries within containers - -### Object Management -* OssObjectAppService: Implements IOssObjectAppService interface - * Provides object upload, download, and deletion functionality - * Supports object metadata management - * Supports object access control - -### File Management -* PublicFileAppService: Implements IPublicFileAppService interface, handles public files -* PrivateFileAppService: Implements IPrivateFileAppService interface, handles private files -* ShareFileAppService: Implements IShareFileAppService interface, handles shared files -* StaticFilesAppService: Implements IStaticFilesAppService interface, handles static files - -## Features - -* Supports file sharding upload -* Supports breakpoint continuation -* Supports file access control -* Supports file metadata management -* Supports file sharing and expiration management - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.md deleted file mode 100644 index 1c4fcf898..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Application/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.Application - -对象存储管理应用服务实现 - -## 功能 - -* 实现对象存储管理的应用服务接口 -* 提供容器管理、对象管理和文件管理的具体实现 -* 支持文件上传、下载和共享功能 -* 实现权限验证和访问控制 - -## 服务实现 - -### 基础服务 -* FileAppServiceBase:文件服务基类,实现IFileAppService接口 -* OssManagementApplicationServiceBase:OSS管理应用服务基类 - -### 容器管理 -* OssContainerAppService:实现IOssContainerAppService接口 - * 提供容器的创建、查询和删除功能 - * 支持容器列表分页查询 - * 支持容器内对象列表查询 - -### 对象管理 -* OssObjectAppService:实现IOssObjectAppService接口 - * 提供对象的上传、下载和删除功能 - * 支持对象元数据管理 - * 支持对象访问权限控制 - -### 文件管理 -* PublicFileAppService:实现IPublicFileAppService接口,处理公共文件 -* PrivateFileAppService:实现IPrivateFileAppService接口,处理私有文件 -* ShareFileAppService:实现IShareFileAppService接口,处理共享文件 -* StaticFilesAppService:实现IStaticFilesAppService接口,处理静态文件 - -## 特性 - -* 支持文件分片上传 -* 支持断点续传 -* 支持文件访问权限控制 -* 支持文件元数据管理 -* 支持文件共享和过期管理 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs deleted file mode 100644 index 72db7121c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/AbpOssManagementResource.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Volo.Abp.Localization; - -namespace LINGYUN.Abp.OssManagement.Localization; - -[LocalizationResourceName("AbpOssManagement")] -public class AbpOssManagementResource -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json deleted file mode 100644 index 3199da6c9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/en.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "culture": "en", - "texts": { - "Abp.OssManagement:010000": "System definition containers cannot be deleted!", - "Abp.OssManagement:010001": "Cannot delete a container that has more than one object!", - "Abp.OssManagement:010402": "The container name already exists!", - "Abp.OssManagement:010404": "The queried container could not be found!", - "Abp.OssManagement:020001": "An object that has more than one child cannot be deleted!", - "Abp.OssManagement:020402": "The object name already exists!", - "Abp.OssManagement:020404": "The queried object could not be found!", - "Abp.OssManagement:020405": "The download link has expired!", - "Abp.OssManagement:000405": "The path object name has exceeded the allowable maximum length and cannot continue to create a new object!", - "Permission:OssManagement": "Object Storage", - "Permission:Container": "Containers", - "Permission:OssObject": "Objects", - "Permission:Create": "Create", - "Permission:Delete": "Delete", - "Permission:Upload": "Upload", - "Permission:Download": "Download", - "FileNotBeNullOrEmpty": "Upload file not be null!", - "FileNotFound": "The specified file does not exist!", - "PathNotFound": "The specified directory does not exist!", - "FilePathNotFound": "The file or directory does not exist!", - "PathAlreadyExists": "The specified directory already exists!", - "PathCannotBeDeletedWithNotEmpty": "The specified directory is not empty and cannot be deleted!", - "FilePathAlreadyExists": "The same file or directory already exists in the specified path!", - "UploadFileSizeBeyondLimit": "Upload file size cannot exceed {0} MB!", - "NotAllowedFileExtensionName": "Not allowed file extension: {0}!", - "DisplayName:OssManagement": "Object Storage", - "Description:OssManagement": "Object Storage", - "DisplayName:OssObject": "Objects", - "Description:OssObject": "Objects", - "DisplayName:FileLimitLength": "File limit size", - "Description:FileLimitLength": "Limit size of uploaded file in MB", - "DisplayName:AllowFileExtensions": "File extension", - "Description:AllowFileExtensions": "List of allowed extensions to upload files, with multiple extensions separated by, don't need a notation", - "DisplayName:Status": "Status", - "Features:OssManagement": "Oss management", - "Features:DisplayName:PublicAccess": "Public Access", - "Features:Description:PublicAccess": "Whether to allow unauthorized users to access public directories", - "Features:DisplayName:OssObject": "Oss Objects", - "Features:Description:OssObject": "Managing Object Storage", - "Features:DisplayName:AllowSharedFile": "Sharing files", - "Features:Description:AllowSharedFile": "Whether users should be allowed to share files", - "Features:DisplayName:DownloadFile": "Download file", - "Features:Description:DownloadFile": "Whether to allow users to download files", - "Features:DisplayName:DownloadLimit": "Limit Of Downloads", - "Features:Description:DownloadLimit": "Limits the total number of times a file is downloaded within a specified period", - "Features:DisplayName:DownloadInterval": "Limit Downloads Interval", - "Features:Description:DownloadInterval": "The update period that limits the number of files downloaded. The time scale is: month. Default: 1", - "Features:DisplayName:UploadFile": "Upload file", - "Features:Description:UploadFile": "Whether to allow users to upload files", - "Features:DisplayName:UploadLimit": "Limit Of Uploads", - "Features:Description:UploadLimit": "Limits the total number of file uploads within a specified period", - "Features:DisplayName:UploadInterval": "Limit Uploads Interval", - "Features:Description:UploadInterval": "The update period that limits the number of files uploaded. The time scale is: month. Default: 1", - "Features:DisplayName:MaxUploadFileCount": "Maximum number of upload files", - "Features:Description:MaxUploadFileCount": "Limit the number of files a user uploads at a time", - "Objects:UploadFile": "Upload File", - "Upload:SelectFile": "Select File", - "Upload:Completed": "Completed", - "Upload:Error": "Error", - "Upload:Pause": "Pause", - "Upload:Resume": "Resume", - "Upload:Cancel": "Cancel", - "Cloud": "Cloud", - "MyCloud": "My Cloud", - "MyDocument": "My Document", - "PublicDocument": "Public Document", - "MyShare": "My Share", - "FileList": "Files", - "CopyLink": "Copy Link", - "Share": "Share", - "Containers": "Containers", - "Containers:Create": "Create Container", - "Containers:Select": "Select Container", - "DisplayName:CreationDate": "Creation Date", - "DisplayName:FileType": "File Type", - "DisplayName:Folder": "FileType", - "DisplayName:LastModifiedDate": "Modified Date", - "DisplayName:Name": "Name", - "DisplayName:Path": "Path", - "DisplayName:Url": "Url", - "DisplayName:ExpirationTime": "Expiration Time", - "DisplayName:AccessCount": "Access Count", - "DisplayName:MaxAccessCount": "Max Access Count", - "DisplayName:AccessRoles": "Access Roles", - "DisplayName:AccessUsers": "Access Users", - "DisplayName:Size": "Size", - "DisplayName:Standard": "Standard", - "Objects:CreateFolder": "Create Folder", - "Objects:Download": "Download", - "Objects:FileSystem": "File System", - "Objects:Preview": "Preview", - "Objects:Root": "Root", - "Objects:BulkDelete": "Bulk Delete", - "Objects:WillBeBulkDeletedMessage": "Multiple selected storage objects will be deleted!" - } -} \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json deleted file mode 100644 index 6cbd2f8fb..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/Localization/Resources/zh-Hans.json +++ /dev/null @@ -1,99 +0,0 @@ -{ - "culture": "zh-Hans", - "texts": { - "Abp.OssManagement:010000": "不能删除系统定义容器!", - "Abp.OssManagement:010001": "不能删除存在多个对象的容器!", - "Abp.OssManagement:010402": "容器名称已经存在!", - "Abp.OssManagement:010404": "未能找到查询的容器!", - "Abp.OssManagement:020001": "不能删除存在多个子级的对象!", - "Abp.OssManagement:020402": "对象名称已经存在!", - "Abp.OssManagement:020404": "未能找到查询的对象!", - "Abp.OssManagement:020405": "下载链接已失效!", - "Abp.OssManagement:000405": "此路径对象名称已超出允许的最大长度,无法继续创建新对象!", - "Permission:OssManagement": "对象存储", - "Permission:Container": "容器管理", - "Permission:OssObject": "对象管理", - "Permission:Create": "新增", - "Permission:Delete": "删除", - "Permission:Upload": "上传", - "Permission:Download": "下载", - "FileNotBeNullOrEmpty": "上传文件不能为空!", - "FileNotFound": "指定的文件不存在!", - "PathNotFound": "指定的目录不存在!", - "FilePathNotFound": "文件或目录不存在!", - "PathAlreadyExists": "指定的目录已经存在!", - "PathCannotBeDeletedWithNotEmpty": "指定的目录不为空,不可删除此目录!", - "FilePathAlreadyExists": "指定的路径中已经有相同的文件或目录存在!", - "UploadFileSizeBeyondLimit": "上传文件大小不能超过 {0} MB!", - "NotAllowedFileExtensionName": "不被允许的文件扩展名: {0}!", - "DisplayName:OssManagement": "对象存储", - "Description:OssManagement": "对象存储", - "DisplayName:OssObject": "Oss对象", - "Description:OssObject": "Oss对象", - "DisplayName:FileLimitLength": "文件限制大小", - "Description:FileLimitLength": "上传文件的限制大小,单位(MB)", - "DisplayName:AllowFileExtensions": "文件扩展名", - "Description:AllowFileExtensions": "允许的上传文件扩展名列表,多个扩展名以,分隔,无需输入.符号", - "DisplayName:Status": "状态", - "Features:OssManagement": "对象存储", - "Features:DisplayName:PublicAccess": "公共访问", - "Features:Description:PublicAccess": "是否允许未经授权的用户访问公共目录", - "Features:DisplayName:OssObject": "Oss管理", - "Features:Description:OssObject": "管理对象存储", - "Features:DisplayName:AllowSharedFile": "分享文件", - "Features:Description:AllowSharedFile": "是否允许用户分享文件", - "Features:DisplayName:DownloadFile": "下载文件", - "Features:Description:DownloadFile": "是否允许用户下载文件", - "Features:DisplayName:DownloadLimit": "限制下载文件次数", - "Features:Description:DownloadLimit": "在指定的周期内限制下载文件的总次数", - "Features:DisplayName:DownloadInterval": "限制下载文件周期", - "Features:Description:DownloadInterval": "限制下载文件次数的更新周期,时间刻度为:月,默认:1", - "Features:DisplayName:UploadFile": "上传文件", - "Features:Description:UploadFile": "是否允许用户上传文件", - "Features:DisplayName:UploadLimit": "限制上传文件次数", - "Features:Description:UploadLimit": "在指定的周期内限制上传文件的总次数", - "Features:DisplayName:UploadInterval": "限制上传文件周期", - "Features:Description:UploadInterval": "限制上传文件次数的更新周期,时间刻度为:月,默认:1", - "Features:DisplayName:MaxUploadFileCount": "上传文件数量", - "Features:Description:MaxUploadFileCount": "用户单次上传文件的限制数量", - "Objects:UploadFile": "上传文件", - "Upload:SelectFile": "选择文件", - "Upload:Completed": "完成", - "Upload:Error": "错误", - "Upload:Pause": "暂停", - "Upload:Resume": "重传", - "Upload:Cancel": "取消", - "Cloud": "云空间", - "MyCloud": "我的云空间", - "MyDocument": "我的文档", - "PublicDocument": "公共文档", - "MyShare": "我的分享", - "FileList": "文件列表", - "CopyLink": "复制链接", - "Share": "分享", - "Containers": "容器", - "Containers:Create": "创建容器", - "Containers:Select": "选择一个容器", - "DisplayName:CreationDate": "创建日期", - "DisplayName:FileType": "文件类型", - "DisplayName:Folder": "文件夹", - "DisplayName:LastModifiedDate": "修改日期", - "DisplayName:Name": "名称", - "DisplayName:Path": "路径", - "DisplayName:Url": "链接", - "DisplayName:ExpirationTime": "过期时间", - "DisplayName:AccessCount": "访问次数", - "DisplayName:MaxAccessCount": "最大访问次数", - "DisplayName:AccessRoles": "可访问角色", - "DisplayName:AccessUsers": "可访问用户", - "DisplayName:Size": "大小", - "DisplayName:Standard": "标准存储", - "Objects:CreateFolder": "创建文件夹", - "Objects:Download": "下载", - "Objects:FileSystem": "文件管理", - "Objects:Preview": "预览", - "Objects:Root": "根目录", - "Objects:BulkDelete": "批量删除", - "Objects:WillBeBulkDeletedMessage": "选择的多个存储对象将被删除!" - } -} \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs deleted file mode 100644 index 2370ef45c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssManagementErrorCodes.cs +++ /dev/null @@ -1,18 +0,0 @@ -namespace LINGYUN.Abp.OssManagement; - -public static class OssManagementErrorCodes -{ - public const string Namespace = "Abp.OssManagement"; - - public const string ContainerDeleteWithStatic = Namespace + ":010000"; - public const string ContainerDeleteWithNotEmpty = Namespace + ":010001"; - public const string ContainerAlreadyExists = Namespace + ":010402"; - public const string ContainerNotFound = Namespace + ":010404"; - - public const string ObjectDeleteWithNotEmpty = Namespace + ":020001"; - public const string ObjectAlreadyExists = Namespace + ":020402"; - public const string ObjectNotFound = Namespace + ":020404"; - public const string ObjectUrlKeyHasExpired = Namespace + ":020405"; - - public const string OssNameHasTooLong = Namespace + ":000405"; -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeEto.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeEto.cs deleted file mode 100644 index 214fdc596..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeEto.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System; -using Volo.Abp.EventBus; - -namespace LINGYUN.Abp.OssManagement; - -/// -/// 对象缓存确认信号 -/// -[Serializable] -[EventName("abp.blob-storing.oss-object.ack")] -public class OssObjectAcknowledgeEto -{ - public string TempPath { get; set; } - public string Bucket { get; set; } - public string Path { get; set; } - public string Object { get; set; } - public TimeSpan? ExpirationTime { get; set; } - public OssObjectAcknowledgeEto() - { - - } - - public OssObjectAcknowledgeEto( - string tempPath, - string bucket, - string path, - string @object, - TimeSpan? expirationTime = null) - { - TempPath = tempPath; - Bucket = bucket; - Path = path; - Object = @object; - ExpirationTime = expirationTime; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.EN.md deleted file mode 100644 index 8db682650..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.EN.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.Domain.Shared - -Object Storage Management Module Shared Domain Layer - -## Features - -* Defines basic types and constants for object storage management -* Defines error codes -* Defines features -* Defines settings -* Provides localization resources - -## Error Codes - -* ContainerDeleteWithStatic: Attempt to delete static container -* ContainerDeleteWithNotEmpty: Attempt to delete non-empty container -* ContainerAlreadyExists: Container already exists -* ContainerNotFound: Container not found -* ObjectDeleteWithNotEmpty: Attempt to delete non-empty object -* ObjectAlreadyExists: Object already exists -* ObjectNotFound: Object not found -* OssNameHasTooLong: OSS name too long - -## Features - -* PublicAccess: Public access -* OssObject.Enable: Enable object storage -* OssObject.AllowSharedFile: Allow file sharing -* OssObject.DownloadFile: Allow file download -* OssObject.DownloadLimit: Download limit -* OssObject.DownloadInterval: Download interval -* OssObject.UploadFile: Allow file upload -* OssObject.UploadLimit: Upload limit -* OssObject.UploadInterval: Upload interval -* OssObject.MaxUploadFileCount: Maximum upload file count - -## Settings - -* DownloadPackageSize: Download package size -* FileLimitLength: File size limit, default: 100 -* AllowFileExtensions: Allowed file extensions, default: dll,zip,rar,txt,log,xml,config,json,jpeg,jpg,png,bmp,ico,xlsx,xltx,xls,xlt,docs,dots,doc,dot,pptx,potx,ppt,pot,chm - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.md deleted file mode 100644 index 1eea189c9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.Domain.Shared - -对象存储管理模块共享领域层 - -## 功能 - -* 定义对象存储管理的基础类型和常量 -* 定义错误代码 -* 定义功能特性 -* 定义设置项 -* 提供本地化资源 - -## 错误代码 - -* ContainerDeleteWithStatic:尝试删除静态容器 -* ContainerDeleteWithNotEmpty:尝试删除非空容器 -* ContainerAlreadyExists:容器已存在 -* ContainerNotFound:容器不存在 -* ObjectDeleteWithNotEmpty:尝试删除非空对象 -* ObjectAlreadyExists:对象已存在 -* ObjectNotFound:对象不存在 -* OssNameHasTooLong:OSS名称过长 - -## 功能特性 - -* PublicAccess:公共访问 -* OssObject.Enable:启用对象存储 -* OssObject.AllowSharedFile:允许文件共享 -* OssObject.DownloadFile:允许文件下载 -* OssObject.DownloadLimit:下载限制 -* OssObject.DownloadInterval:下载间隔 -* OssObject.UploadFile:允许文件上传 -* OssObject.UploadLimit:上传限制 -* OssObject.UploadInterval:上传间隔 -* OssObject.MaxUploadFileCount:最大上传文件数 - -## 设置项 - -* DownloadPackageSize:下载包大小 -* FileLimitLength:文件大小限制,默认:100 -* AllowFileExtensions:允许的文件扩展名,默认:dll,zip,rar,txt,log,xml,config,json,jpeg,jpg,png,bmp,ico,xlsx,xltx,xls,xlt,docs,dots,doc,dot,pptx,potx,ppt,pot,chm - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs deleted file mode 100644 index a3a0f4fd8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain.Shared/System/IO/StreamExtensions.cs +++ /dev/null @@ -1,11 +0,0 @@ -namespace System.IO; - -public static class StreamExtensions -{ - public static bool IsNullOrEmpty( - this Stream stream) - { - return stream == null || - Equals(stream, Stream.Null); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs deleted file mode 100644 index afbcc9547..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementContainer.cs +++ /dev/null @@ -1,8 +0,0 @@ -using Volo.Abp.BlobStoring; - -namespace LINGYUN.Abp.OssManagement; - -[BlobContainerName("abp-blobs")] -public class AbpOssManagementContainer -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs deleted file mode 100644 index 5e0f91dec..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementDomainModule.cs +++ /dev/null @@ -1,16 +0,0 @@ -using LINGYUN.Abp.Features.LimitValidation; -using Volo.Abp.Domain; -using Volo.Abp.Modularity; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpOssManagementDomainSharedModule), - typeof(AbpDddDomainModule), - typeof(AbpMultiTenancyModule), - typeof(AbpFeaturesLimitValidationModule) - )] -public class AbpOssManagementDomainModule : AbpModule -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs deleted file mode 100644 index b57a49104..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptions.cs +++ /dev/null @@ -1,88 +0,0 @@ -using JetBrains.Annotations; -using System; -using System.Collections.Generic; -using System.Linq; -using Volo.Abp; -using Volo.Abp.BackgroundWorkers; - -namespace LINGYUN.Abp.OssManagement; - -public class AbpOssManagementOptions -{ - /// - /// 静态容器 - /// 不允许被删除 - /// - public List StaticBuckets { get; } - /// - /// Default value: true. - /// If is false, - /// this property is ignored and the cleanup worker doesn't work for this application instance. - /// - public bool IsCleanupEnabled { get; set; } - /// - /// Default: 3,600,000 ms. - /// - public int CleanupPeriod { get; set; } - /// - /// 禁用缓存目录清除作业 - /// default: false - /// - public bool DisableTempPruning { get; set; } - /// - /// 每批次清理数量 - /// default: 100 - /// - public int MaximumTempSize { get; set; } - /// - /// 最小缓存对象寿命 - /// default: 30 minutes - /// - public TimeSpan MinimumTempLifeSpan { get; set; } - /// - /// 文件流处理器 - /// - [NotNull] - public List Processers { get; } - - public AbpOssManagementOptions() - { - StaticBuckets = new List - { - // 公共目录 - "public", - // 用户私有目录 - "users", - // 系统目录 - "system", - // 工作流 - "workflow", - // 图标 - "icons", - // 缓存 - "temp" - }; - Processers = new List - { - new NoneOssObjectProcesser() - }; - - IsCleanupEnabled = true; - CleanupPeriod = 3_600_000; - MaximumTempSize = 100; - DisableTempPruning = false; - MinimumTempLifeSpan = TimeSpan.FromMinutes(30); - } - - public void AddStaticBucket(string bucket) - { - Check.NotNullOrWhiteSpace(bucket, nameof(bucket)); - - StaticBuckets.AddIfNotContains(bucket); - } - - public bool CheckStaticBucket(string bucket) - { - return StaticBuckets.Any(bck => bck.Equals(bucket)); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs deleted file mode 100644 index a54577640..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/AbpOssManagementOptionsExtensions.cs +++ /dev/null @@ -1,14 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public static class AbpOssManagementOptionsExtensions -{ - public static void AddProcesser( - this AbpOssManagementOptions options, - TProcesserContributor contributor) - where TProcesserContributor : IOssObjectProcesserContributor - { - options.Processers.InsertBefore((x) => x is NoneOssObjectProcesser, contributor); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs deleted file mode 100644 index 092322fe0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/BulkDeleteObjectRequest.cs +++ /dev/null @@ -1,25 +0,0 @@ -using JetBrains.Annotations; -using System.Collections.Generic; -using Volo.Abp; - -namespace LINGYUN.Abp.OssManagement; - -public class BulkDeleteObjectRequest -{ - public string Bucket { get; } - public string Path { get; } - public ICollection Objects { get; } - - public BulkDeleteObjectRequest( - [NotNull] string bucket, - ICollection objects, - string path = "") - { - Check.NotNullOrWhiteSpace(bucket, nameof(bucket)); - Check.NotNullOrEmpty(objects, nameof(objects)); - - Bucket = bucket; - Objects = objects; - Path = path; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs deleted file mode 100644 index 99f2ff427..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/CreateOssObjectRequest.cs +++ /dev/null @@ -1,35 +0,0 @@ -using JetBrains.Annotations; -using System; -using System.IO; -using Volo.Abp; - -namespace LINGYUN.Abp.OssManagement; - -public class CreateOssObjectRequest -{ - public string Bucket { get; } - public string Path { get; } - public string Object { get; } - public bool Overwrite { get; set; } - public Stream Content { get; private set; } - public TimeSpan? ExpirationTime { get; } - public CreateOssObjectRequest( - [NotNull] string bucket, - [NotNull] string @object, - [CanBeNull] Stream content, - [CanBeNull] string path = null, - [CanBeNull] TimeSpan? expirationTime = null) - { - Bucket = Check.NotNullOrWhiteSpace(bucket, nameof(bucket)); - Object = Check.NotNullOrWhiteSpace(@object, nameof(@object)); - - Path = path; - Content = content; - ExpirationTime = expirationTime; - } - - public void SetContent(Stream content) - { - Content = content; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/ExprieOssObjectRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/ExprieOssObjectRequest.cs deleted file mode 100644 index 20864760f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/ExprieOssObjectRequest.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; - -namespace LINGYUN.Abp.OssManagement; -public class ExprieOssObjectRequest -{ - public string Bucket { get; } - public int Batch { get; } - public DateTimeOffset ExpirationTime { get; } - public ExprieOssObjectRequest( - string bucket, - int batch, - DateTimeOffset expirationTime) - { - Bucket = bucket; - Batch = batch; - ExpirationTime = expirationTime; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs deleted file mode 100644 index 1ad15c4b2..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersRequest.cs +++ /dev/null @@ -1,20 +0,0 @@ -namespace LINGYUN.Abp.OssManagement; - -public class GetOssContainersRequest -{ - public string Prefix { get; } - public string Marker { get; } - public int Current { get; } - public int? MaxKeys { get; } - public GetOssContainersRequest( - string prefix = null, - string marker = null, - int current = 0, - int? maxKeys = 10) - { - Prefix = prefix; - Marker = marker; - Current = current; - MaxKeys = maxKeys; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs deleted file mode 100644 index dac01b7a8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssContainersResponse.cs +++ /dev/null @@ -1,27 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssContainersResponse -{ - public string Prefix { get; } - public string Marker { get; } - public string NextMarker { get; } - public int MaxKeys { get; } - public List Containers { get; } - - public GetOssContainersResponse( - string prefix, - string marker, - string nextMarker, - int maxKeys, - List containers) - { - Prefix = prefix; - Marker = marker; - NextMarker = nextMarker; - MaxKeys = maxKeys; - - Containers = containers; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectRequest.cs deleted file mode 100644 index 77f743b6e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectRequest.cs +++ /dev/null @@ -1,33 +0,0 @@ -using JetBrains.Annotations; -using Volo.Abp; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssObjectRequest -{ - public string Bucket { get; } - public string Path { get; } - public string Object { get; } - public bool MD5 { get; set; } - /// - /// 需要处理文件的参数 - /// - public string Process { get; } - - public bool CreatePathIsNotExists { get; set; } = false; - - public GetOssObjectRequest( - [NotNull] string bucket, - [NotNull] string @object, - [CanBeNull] string path = "", - [CanBeNull] string process = "") - { - Check.NotNullOrWhiteSpace(bucket, nameof(bucket)); - Check.NotNullOrWhiteSpace(@object, nameof(@object)); - - Bucket = bucket; - Object = @object; - Path = path; - Process = process; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs deleted file mode 100644 index b392b858f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsRequest.cs +++ /dev/null @@ -1,36 +0,0 @@ -using JetBrains.Annotations; -using Volo.Abp; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssObjectsRequest -{ - public string BucketName { get; } - public string Prefix { get; } - public string Delimiter { get; } - public string Marker { get; } - public string EncodingType { get; } - public int Current { get; } - public int? MaxKeys { get; } - public bool MD5 { get; set; } - public bool CreatePathIsNotExists { get; set; } = false; - public GetOssObjectsRequest( - [NotNull] string bucketName, - string prefix = null, - string marker = null, - string delimiter = null, - string encodingType = null, - int current = 0, - int maxKeys = 10) - { - Check.NotNullOrWhiteSpace(bucketName, nameof(bucketName)); - - BucketName = bucketName; - Prefix = prefix; - Marker = marker; - Delimiter = delimiter; - EncodingType = encodingType; - Current = current; - MaxKeys = maxKeys; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs deleted file mode 100644 index c5e398a20..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/GetOssObjectsResponse.cs +++ /dev/null @@ -1,32 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class GetOssObjectsResponse -{ - public string Bucket { get; } - public string Prefix { get; } - public string Delimiter { get; } - public string Marker { get; } - public string NextMarker { get; } - public int MaxKeys { get; } - public List Objects { get; } - public GetOssObjectsResponse( - string bucket, - string prefix, - string marker, - string nextMarker, - string delimiter, - int maxKeys, - List ossObjects) - { - Bucket = bucket; - Prefix = prefix; - Marker = marker; - NextMarker = nextMarker; - Delimiter = delimiter; - MaxKeys = maxKeys; - - Objects = ossObjects; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs deleted file mode 100644 index a88cc5524..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainer.cs +++ /dev/null @@ -1,81 +0,0 @@ -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -/// -/// Oss容器 -/// -public interface IOssContainer -{ - /// - /// 创建容器 - /// - /// - /// - Task CreateAsync(string name); - /// - /// 创建Oss对象 - /// - /// - /// - Task CreateObjectAsync(CreateOssObjectRequest request); - /// - /// 获取容器信息 - /// - /// - /// - Task GetAsync(string name); - /// - /// 获取Oss对象信息 - /// - /// - /// - Task GetObjectAsync(GetOssObjectRequest request); - /// - /// 删除容器 - /// - /// - /// - /// - /// When the bucket does not exist, an exception is thrown with the error code is - /// - /// - Task DeleteAsync(string name); - /// - /// 删除Oss对象 - /// - /// - /// - Task DeleteObjectAsync(GetOssObjectRequest request); - /// - /// 批量删除Oss对象 - /// - /// - /// - Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request); - /// - /// 容器是否存在 - /// - /// - /// - Task ExistsAsync(string name); - /// - /// Oss对象是否存在 - /// - /// - /// - Task ObjectExistsAsync(GetOssObjectRequest request); - /// - /// 获取容器列表 - /// - /// - /// - Task GetListAsync(GetOssContainersRequest request); - /// - /// 获取对象列表 - /// - /// - /// - Task GetObjectsAsync(GetOssObjectsRequest request); - // Task> GetObjectsAsync(string name, string prefix = null, string marker = null, string delimiter = null, int maxResultCount = 10); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs deleted file mode 100644 index 3fc81d0e9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerExtensions.cs +++ /dev/null @@ -1,92 +0,0 @@ -using System.Collections.Generic; -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -public static class IOssContainerExtensions -{ - /// - /// 如果不存在容器则创建 - /// - /// - /// - /// 返回容器信息 - public static async Task CreateIfNotExistsAsync( - this IOssContainer ossContainer, - string name) - { - if (! await ossContainer.ExistsAsync(name)) - { - await ossContainer.CreateAsync(name); - } - - return await ossContainer.GetAsync(name); - } - - public static async Task DeleteObjectAsync( - this IOssContainer ossContainer, - string bucket, - string @object, - string path = "") - { - await ossContainer.DeleteObjectAsync( - new GetOssObjectRequest(bucket, @object, path)); - } - - public static async Task BulkDeleteObjectsAsync( - this IOssContainer ossContainer, - string bucketName, - ICollection objectNames, - string path = "") - { - await ossContainer.BulkDeleteObjectsAsync( - new BulkDeleteObjectRequest(bucketName, objectNames, path)); - } - - public static async Task GetListAsync( - this IOssContainer ossContainer, - string prefix = null, - string marker = null, - int skipCount = 0, - int maxResultCount = 10) - { - return await ossContainer.GetListAsync( - new GetOssContainersRequest(prefix, marker, skipCount, maxResultCount)); - } - - public static async Task GetObjectAsync( - this IOssContainer ossContainer, - string bucket, - string @object, - string path = "", - bool md5 = false, - bool createPathIsNotExists = false) - { - return await ossContainer.GetObjectAsync( - new GetOssObjectRequest(bucket, @object, path) - { - MD5 = md5, - CreatePathIsNotExists = createPathIsNotExists - }); - } - - public static async Task GetObjectsAsync( - this IOssContainer ossContainer, - string name, - string prefix = null, - string marker = null, - string delimiter = null, - string encodingType = null, - bool md5 = false, - int skipCount = 0, - int maxResultCount = 10, - bool createPathIsNotExists = false) - { - return await ossContainer.GetObjectsAsync( - new GetOssObjectsRequest(name, prefix, marker, delimiter, encodingType, skipCount, maxResultCount) - { - MD5 = md5, - CreatePathIsNotExists = createPathIsNotExists, - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs deleted file mode 100644 index ce4cfebf1..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssContainerFactory.cs +++ /dev/null @@ -1,17 +0,0 @@ -namespace LINGYUN.Abp.OssManagement; - -/// -/// Oss容器构建工厂 -/// -public interface IOssContainerFactory -{ - IOssContainer Create(); -} - -/// -/// Oss容器构建工厂 -/// -public interface IOssContainerFactory -{ - IOssContainer Create(TConfiguration configuration); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectExpireor.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectExpireor.cs deleted file mode 100644 index dd2c5ebe2..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectExpireor.cs +++ /dev/null @@ -1,7 +0,0 @@ -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; -public interface IOssObjectExpireor -{ - Task ExpireAsync(ExprieOssObjectRequest request); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs deleted file mode 100644 index dda063c33..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/IOssObjectProcesserContributor.cs +++ /dev/null @@ -1,8 +0,0 @@ -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -public interface IOssObjectProcesserContributor -{ - Task ProcessAsync(OssObjectProcesserContext context); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs deleted file mode 100644 index ba3869de1..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NoneOssObjectProcesser.cs +++ /dev/null @@ -1,13 +0,0 @@ -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement; - -public class NoneOssObjectProcesser : IOssObjectProcesserContributor -{ - public Task ProcessAsync(OssObjectProcesserContext context) - { - context.SetContent(context.OssObject.Content); - - return Task.CompletedTask; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NullOssObjectExpireor.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NullOssObjectExpireor.cs deleted file mode 100644 index e89a56747..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/NullOssObjectExpireor.cs +++ /dev/null @@ -1,15 +0,0 @@ -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; - -namespace LINGYUN.Abp.OssManagement; - -[Dependency(TryRegister = true)] -public class NullOssObjectExpireor : IOssObjectExpireor, ISingletonDependency -{ - public readonly static IOssObjectExpireor Instance = new NullOssObjectExpireor(); - - public Task ExpireAsync(ExprieOssObjectRequest request) - { - return Task.CompletedTask; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainer.cs deleted file mode 100644 index a70541aee..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainer.cs +++ /dev/null @@ -1,30 +0,0 @@ -using System; -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -/// -/// 描述了一个容器的状态信息 -/// -public class OssContainer -{ - public string Name { get; } - public long Size { get; } - public DateTime CreationDate { get; } - public DateTime? LastModifiedDate { get; } - public IDictionary Metadata { get; } - - public OssContainer( - string name, - DateTime creationDate, - long size = 0, - DateTime? lastModifiedDate = null, - IDictionary metadata = null) - { - Name = name; - CreationDate = creationDate; - LastModifiedDate = lastModifiedDate; - Size = size; - Metadata = metadata ?? new Dictionary(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs deleted file mode 100644 index 27903ff33..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssContainerBase.cs +++ /dev/null @@ -1,70 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Threading.Tasks; -using Volo.Abp; - -namespace LINGYUN.Abp.OssManagement; -public abstract class OssContainerBase : IOssContainer -{ - protected AbpOssManagementOptions Options { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - - protected OssContainerBase( - IOptions options, - IServiceScopeFactory serviceScopeFactory) - { - Options = options.Value; - ServiceScopeFactory = serviceScopeFactory; - } - - public async virtual Task GetObjectAsync(GetOssObjectRequest request) - { - var ossObject = await GetOssObjectAsync(request); - - if (ShouldProcessObject(ossObject) && !request.Process.IsNullOrWhiteSpace()) - { - using var serviceScope = ServiceScopeFactory.CreateScope(); - var context = new OssObjectProcesserContext(request.Process, ossObject, serviceScope.ServiceProvider); - foreach (var processer in Options.Processers) - { - await processer.ProcessAsync(context); - - if (context.Handled) - { - ossObject.SetContent(context.Content); - break; - } - } - } - - return ossObject; - } - - public async virtual Task DeleteAsync(string name) - { - if (Options.CheckStaticBucket(name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithStatic); - } - - await DeleteBucketAsync(name); - } - - public abstract Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request); - public abstract Task CreateAsync(string name); - public abstract Task CreateObjectAsync(CreateOssObjectRequest request); - public abstract Task DeleteObjectAsync(GetOssObjectRequest request); - public abstract Task ExistsAsync(string name); - public abstract Task GetAsync(string name); - public abstract Task GetListAsync(GetOssContainersRequest request); - public abstract Task GetObjectsAsync(GetOssObjectsRequest request); - protected abstract Task DeleteBucketAsync(string name); - protected abstract Task GetOssObjectAsync(GetOssObjectRequest request); - protected virtual bool ShouldProcessObject(OssObject ossObject) - { - return true; - } - - public abstract Task ObjectExistsAsync(GetOssObjectRequest request); -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs deleted file mode 100644 index 1f57728b2..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObject.cs +++ /dev/null @@ -1,52 +0,0 @@ -using System; -using System.Collections.Generic; -using System.IO; - -namespace LINGYUN.Abp.OssManagement; - -/// -/// 描述了一个对象的状态信息 -/// -public class OssObject -{ - private Stream _content; - - public bool IsFolder { get; } - public string Name { get; } - public string FullName { get; set; } - public string Prefix { get; } - public string MD5{ get; } - public long Size { get; } - public Stream Content => _content; - public DateTime? CreationDate { get; } - public DateTime? LastModifiedDate { get; } - public IDictionary Metadata { get; } - public OssObject( - string name, - string prefix, - string md5, - DateTime? creationDate = null, - long size = 0, - DateTime? lastModifiedDate = null, - IDictionary metadata = null, - bool isFolder = false) - { - Name = name; - Prefix = prefix; - MD5 = md5; - CreationDate = creationDate; - LastModifiedDate = lastModifiedDate; - Size = size; - IsFolder = isFolder; - Metadata = metadata ?? new Dictionary(); - } - - public void SetContent(Stream stream) - { - _content = stream; - if (!_content.IsNullOrEmpty() && _content.CanSeek && _content.Position != 0) - { - _content.Seek(0, SeekOrigin.Begin); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeHandler.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeHandler.cs deleted file mode 100644 index 964708cc4..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectAcknowledgeHandler.cs +++ /dev/null @@ -1,105 +0,0 @@ -using System; -using System.Threading.Tasks; -using System.Web; -using Volo.Abp.DependencyInjection; -using Volo.Abp.EventBus.Distributed; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectAcknowledgeHandler : IDistributedEventHandler, ITransientDependency -{ - protected const string Bucket = "temp"; - - private readonly IOssContainerFactory _containerFactory; - - public OssObjectAcknowledgeHandler(IOssContainerFactory containerFactory) - { - _containerFactory = containerFactory; - } - - public async virtual Task HandleEventAsync(OssObjectAcknowledgeEto eventData) - { - var ossContainer = _containerFactory.Create(); - - var tempPath = HttpUtility.UrlDecode(GetTempPath(eventData.TempPath)); - var tempObject = HttpUtility.UrlDecode(GetTempObject(eventData.TempPath)); - - var ossObject = await ossContainer.GetObjectAsync(Bucket, tempObject, tempPath, createPathIsNotExists: true); - - using (ossObject.Content) - { - var createOssObjectRequest = new CreateOssObjectRequest( - eventData.Bucket, - eventData.Object, - ossObject.Content, - eventData.Path, - eventData.ExpirationTime); - - await ossContainer.CreateObjectAsync(createOssObjectRequest); - } - } - - private static string GetTempPath(string tempPath) - { - // api/files/static/demo-tenant-id/temp/p/path/file.txt => path - if (tempPath.Contains(Bucket)) - { - // api/files/static/demo-tenant-id/temp/p/path/file.txt => p/path/file.txt - var lastIndex = tempPath.LastIndexOf(Bucket); - - tempPath = tempPath.Substring(lastIndex + Bucket.Length); - - // p/path/file.txt => 6 - var pathCharIndex = tempPath.LastIndexOf("/"); - if (pathCharIndex >= 0) - { - // p/path/file.txt => 0, 6 => - tempPath = tempPath.Substring(0, pathCharIndex); - } - } - - // 对目录url进行处理 - var pathIndex = tempPath.LastIndexOf("p/"); - if (pathIndex >= 0) - { - tempPath = tempPath.Substring(pathIndex + 2); - } - - // 尾部不是 / 符号则不是目录 - if (!tempPath.EndsWith("/")) - { - var pathCharIndex = tempPath.LastIndexOf("/"); - if (pathCharIndex >= 0) - { - // path/file.txt => 0, 4 => - tempPath = tempPath.Substring(0, pathCharIndex); - } - } - - return tempPath.RemovePreFix("/"); - } - - private static string GetTempObject(string tempPath) - { - // api/files/static/demo-tenant-id/temp/path/file.txt => file.txt - - var path = GetTempPath(tempPath); - - if (tempPath.EndsWith(path)) - { - var fileNameIndex = tempPath.LastIndexOf("/"); - if (fileNameIndex >= 0) - { - return tempPath.Substring(fileNameIndex + 1); - } - } - - var pathIndex = tempPath.LastIndexOf(path); - if (pathIndex >= 0) - { - tempPath = tempPath.Substring(pathIndex + path.Length); - } - - return tempPath.RemovePreFix("/"); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs deleted file mode 100644 index e011028c3..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectComparer.cs +++ /dev/null @@ -1,26 +0,0 @@ -using System.Collections.Generic; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectComparer : IComparer -{ - public virtual int Compare(OssObject x, OssObject y) - { - if (x.IsFolder && y.IsFolder) - { - return x.Name.CompareTo(y.Name); - } - - if (x.IsFolder && !y.IsFolder) - { - return -1; - } - - if (!x.IsFolder && y.IsFolder) - { - return 1; - } - - return x.Name.CompareTo(y.Name); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs deleted file mode 100644 index 18626186f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectProcesserContext.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.IO; -using Volo.Abp.DependencyInjection; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectProcesserContext : IServiceProviderAccessor -{ - public string Process { get; } - public OssObject OssObject { get; } - public bool Handled { get; private set; } - public Stream Content { get; private set; } - public IServiceProvider ServiceProvider { get; } - - public OssObjectProcesserContext( - string process, - OssObject ossObject, - IServiceProvider serviceProvider) - { - Process = process; - OssObject = ossObject; - ServiceProvider = serviceProvider; - } - - public void SetContent(Stream content) - { - Content = content; - Content.Seek(0, SeekOrigin.Begin); - Handled = true; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectTempCleanupService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectTempCleanupService.cs deleted file mode 100644 index 979a6e904..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssObjectTempCleanupService.cs +++ /dev/null @@ -1,56 +0,0 @@ -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Logging.Abstractions; -using Microsoft.Extensions.Options; -using System; -using System.Threading.Tasks; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement; - -public class OssObjectTempCleanupService : ITransientDependency -{ - public ILogger Logger { get; set; } - public IOssObjectExpireor OssObjectExpireor { get; set; } - protected AbpOssManagementOptions Options { get; } - protected ICurrentTenant CurrentTenant { get; } - - public OssObjectTempCleanupService( - ICurrentTenant currentTenant, - IOptions options) - { - CurrentTenant = currentTenant; - Options = options.Value; - - OssObjectExpireor = NullOssObjectExpireor.Instance; - Logger = NullLogger.Instance; - } - - public virtual async Task CleanAsync() - { - Logger.LogInformation("Start cleanup."); - - if (!Options.DisableTempPruning) - { - var host = CurrentTenant.IsAvailable ? CurrentTenant.Name ?? CurrentTenant.Id.ToString() : "host"; - - Logger.LogInformation($"Start cleanup {host} temp objects."); - - var threshold = DateTimeOffset.UtcNow - Options.MinimumTempLifeSpan; - - try - { - var request = new ExprieOssObjectRequest( - "temp", - Options.MaximumTempSize, - threshold); - - await OssObjectExpireor.ExpireAsync(request); - } - catch (Exception exception) - { - Logger.LogException(exception); - } - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssStaticContainerDataSeedContributor.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssStaticContainerDataSeedContributor.cs deleted file mode 100644 index ed9123d57..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/LINGYUN/Abp/OssManagement/OssStaticContainerDataSeedContributor.cs +++ /dev/null @@ -1,29 +0,0 @@ -using Microsoft.Extensions.Options; -using System.Threading.Tasks; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; - -namespace LINGYUN.Abp.OssManagement; - -public class OssStaticContainerDataSeedContributor : IDataSeedContributor, ITransientDependency -{ - private readonly AbpOssManagementOptions _options; - private readonly IOssContainerFactory _ossContainerFactory; - public OssStaticContainerDataSeedContributor( - IOptions options, - IOssContainerFactory ossContainerFactory) - { - _options = options.Value; - _ossContainerFactory = ossContainerFactory; - } - - public async virtual Task SeedAsync(DataSeedContext context) - { - var ossContainer = _ossContainerFactory.Create(); - - foreach (var bucket in _options.StaticBuckets) - { - await ossContainer.CreateIfNotExistsAsync(bucket); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.EN.md deleted file mode 100644 index 1b936eb98..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.EN.md +++ /dev/null @@ -1,28 +0,0 @@ -# LINGYUN.Abp.OssManagement.Domain - -Object Storage Management Module Domain Layer. - -## Features - -* Provides core domain models and business logic for object storage management -* Defines basic operation interfaces for object storage containers and objects -* Provides core logic for file processing and validation -* Supports file sharding upload and breakpoint continuation -* Supports extension of multiple storage providers - -## Configuration - -### AbpOssManagementOptions - -* StaticBuckets: List of static containers that cannot be deleted -* IsCleanupEnabled: Whether to enable cleanup functionality, default: true -* CleanupPeriod: Cleanup period, default: 3,600,000 ms -* DisableTempPruning: Whether to disable cache directory cleanup job, default: false -* MaximumTempSize: Number of items to clean per batch, default: 100 -* MinimumTempLifeSpan: Minimum cache object lifespan, default: 30 minutes -* Processers: List of file stream processors - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.md deleted file mode 100644 index 6a102fc4c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/README.md +++ /dev/null @@ -1,28 +0,0 @@ -# LINGYUN.Abp.OssManagement.Domain - -对象存储管理模块领域层。 - -## 功能 - -* 提供对象存储管理的核心领域模型和业务逻辑 -* 定义对象存储容器和对象的基本操作接口 -* 提供文件处理和验证的核心逻辑 -* 支持文件分片上传和断点续传 -* 支持多种存储提供程序的扩展 - -## 配置项 - -### AbpOssManagementOptions - -* StaticBuckets: 静态容器列表,这些容器不允许被删除 -* IsCleanupEnabled: 是否启用清理功能,默认:true -* CleanupPeriod: 清理周期,默认:3,600,000 ms -* DisableTempPruning: 是否禁用缓存目录清除作业,默认:false -* MaximumTempSize: 每批次清理数量,默认:100 -* MinimumTempLifeSpan: 最小缓存对象寿命,默认:30分钟 -* Processers: 文件流处理器列表 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs deleted file mode 100644 index ccf86b05c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/ByteExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace System; -public static class ByteExtensions -{ - private readonly static string[] ImageTypes = new string[] - { - "6677",// bmp - "7173",// gif - "13780",// png - "255216"// jpg - }; - - public static bool IsImage(this byte[] fileBytes) - { - if (fileBytes.IsNullOrEmpty()) - { - return false; - } - - string fileclass = ""; - for (int i = 0; i < 2; i++) - { - fileclass += fileBytes[i].ToString(); - } - - return ImageTypes.Any(type => type.Equals(fileclass)); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs deleted file mode 100644 index fdad716e9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Domain/System/StringArrayArgsExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Linq; - -namespace System; -public static class StringArrayArgsExtensions -{ - public static string GetStringPrarm(this string[] args, string key) - { - if (!args.Any()) - { - return null; - } - - return args - .Where(arg => arg.StartsWith(key)) - .Select(arg => arg.Substring(key.Length)) - .FirstOrDefault(); - } - - public static string GetInt32Prarm(this string[] args, string key) - { - if (!args.Any()) - { - return null; - } - - return args - .Where(arg => arg.StartsWith(key)) - .Select(arg => arg.Substring(key.Length)) - .FirstOrDefault(arg => int.TryParse(arg, out _)); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.EN.md deleted file mode 100644 index 7947eeaa2..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.EN.md +++ /dev/null @@ -1,53 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.ImageSharp - -ImageSharp image processing implementation for local file system - -## Features - -* Implements image processing for local file system based on ImageSharp -* Supports image format conversion -* Supports image resizing and cropping -* Supports watermark addition -* Supports image quality adjustment -* Supports image metadata processing - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Image Processing Features - -Supports the following image processing operations: -* resize: Adjust image size -* crop: Crop image -* rotate: Rotate image -* watermark: Add watermark -* format: Convert image format -* quality: Adjust image quality - -## Usage Example - -Image processing parameters are passed through URL query string: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## Notes - -* Requires installation of ImageSharp related NuGet packages -* Recommended to configure appropriate image processing limits to prevent resource abuse -* Recommended to enable image caching for better performance - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.md deleted file mode 100644 index 775161b68..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.ImageSharp/README.md +++ /dev/null @@ -1,53 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.ImageSharp - -本地文件系统的ImageSharp图像处理实现 - -## 功能 - -* 基于ImageSharp实现本地文件系统的图像处理 -* 支持图像格式转换 -* 支持图像缩放和裁剪 -* 支持图像水印添加 -* 支持图像质量调整 -* 支持图像元数据处理 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 图像处理功能 - -支持以下图像处理操作: -* resize:调整图像大小 -* crop:裁剪图像 -* rotate:旋转图像 -* watermark:添加水印 -* format:转换图像格式 -* quality:调整图像质量 - -## 使用示例 - -图像处理参数通过URL查询字符串传递: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## 注意事项 - -* 需要安装ImageSharp相关的NuGet包 -* 建议配置适当的图像处理限制以避免资源滥用 -* 建议启用图像缓存以提高性能 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.EN.md deleted file mode 100644 index bd5277a37..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.EN.md +++ /dev/null @@ -1,52 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp - -ImageSharp image processing implementation module for local file system - -## Features - -* Implements image processing functionality for local file system based on ImageSharp -* Implements IImageProcessor interface -* Provides high-performance image processing capabilities -* Supports multiple image formats -* Provides rich image processing options - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImagingImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Image Processing Features - -Supports the following image processing operations: -* Scaling: Supports multiple scaling modes and algorithms -* Cropping: Supports rectangular and circular cropping -* Rotation: Supports rotation at any angle -* Watermark: Supports text and image watermarks -* Format Conversion: Supports conversion between multiple image formats -* Quality Adjustment: Supports compression quality control - -## Performance Optimization - -* Uses ImageSharp's high-performance algorithms -* Supports image processing cache -* Supports asynchronous processing -* Supports memory optimization - -## Notes - -* Requires installation of ImageSharp related NuGet packages -* Recommended to configure appropriate image processing limits -* Recommended to enable image caching -* Pay attention to memory usage management - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.md deleted file mode 100644 index 74dd84cc6..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp/README.md +++ /dev/null @@ -1,52 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp - -本地文件系统的ImageSharp图像处理实现模块 - -## 功能 - -* 基于ImageSharp实现本地文件系统的图像处理功能 -* 实现IImageProcessor接口 -* 提供高性能的图像处理能力 -* 支持多种图像格式 -* 提供丰富的图像处理选项 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImagingImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 图像处理功能 - -支持以下图像处理操作: -* 缩放:支持多种缩放模式和算法 -* 裁剪:支持矩形裁剪和圆形裁剪 -* 旋转:支持任意角度旋转 -* 水印:支持文字水印和图片水印 -* 格式转换:支持多种图片格式之间的转换 -* 质量调整:支持压缩质量控制 - -## 性能优化 - -* 使用ImageSharp的高性能算法 -* 支持图像处理缓存 -* 支持异步处理 -* 支持内存优化 - -## 注意事项 - -* 需要安装ImageSharp相关的NuGet包 -* 建议配置适当的图像处理限制 -* 建议启用图像缓存 -* 注意内存使用管理 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.EN.md deleted file mode 100644 index 713236329..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.EN.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.Imaging - -Base image processing module for local file system - -## Features - -* Provides basic image processing functionality for local file system -* Defines image processing interfaces and abstract classes -* Supports image processing extensions -* Provides image processing pipeline -* Supports image processing cache - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImagingModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Core Interfaces - -* IImageProcessor: Image processor interface -* IImageProcessorFactory: Image processor factory interface -* IImageProcessorCache: Image processor cache interface -* IImageProcessorPipeline: Image processing pipeline interface - -## Extension Features - -* Supports custom image processors -* Supports custom image processing pipelines -* Supports custom image caching strategies -* Supports image processing parameter validation - -## Related Modules - -* LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp: ImageSharp-based implementation - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.md deleted file mode 100644 index 28e3a82b8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem.Imaging/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem.Imaging - -本地文件系统的图像处理基础模块 - -## 功能 - -* 提供本地文件系统的图像处理基础功能 -* 定义图像处理接口和抽象类 -* 支持图像处理扩展 -* 提供图像处理管道 -* 支持图像处理缓存 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImagingModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 核心接口 - -* IImageProcessor:图像处理器接口 -* IImageProcessorFactory:图像处理器工厂接口 -* IImageProcessorCache:图像处理缓存接口 -* IImageProcessorPipeline:图像处理管道接口 - -## 扩展功能 - -* 支持自定义图像处理器 -* 支持自定义图像处理管道 -* 支持自定义图像缓存策略 -* 支持图像处理参数验证 - -## 相关模块 - -* LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp:基于ImageSharp的具体实现 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/AbpOssManagementFileSystemModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/AbpOssManagementFileSystemModule.cs deleted file mode 100644 index bab53ee80..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/AbpOssManagementFileSystemModule.cs +++ /dev/null @@ -1,41 +0,0 @@ -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using System; -using System.IO; -using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.FileSystem; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement.FileSystem; - -[DependsOn( - typeof(AbpBlobStoringFileSystemModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementFileSystemModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - var ossConfiguration = configuration.GetSection("OssManagement"); - var ossProvider = ossConfiguration["Provider"]; - - if (!ossProvider.IsNullOrWhiteSpace() && - "FileSystem".Equals(ossProvider, StringComparison.InvariantCultureIgnoreCase)) - { - Configure(options => - { - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - containerConfiguration.UseFileSystem(oss => - { - oss.BasePath = Path.Combine( - Directory.GetCurrentDirectory(), - ossConfiguration["Bucket"] ?? "blobs"); - oss.AppendContainerNameToBasePath = ossConfiguration.GetValue("AppendContainerNameToBasePath", true); - }); - }); - }); - context.Services.AddFileSystemContainer(); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs deleted file mode 100644 index 6f9d3e28f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainer.cs +++ /dev/null @@ -1,576 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.FileSystem; -using Volo.Abp.IO; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.FileSystem; - -/// -/// Oss容器的本地文件系统实现 -/// -internal class FileSystemOssContainer : OssContainerBase, IOssObjectExpireor -{ - protected ICurrentTenant CurrentTenant { get; } - protected IHostEnvironment Environment { get; } - protected IBlobFilePathCalculator FilePathCalculator { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - - public FileSystemOssContainer( - ICurrentTenant currentTenant, - IHostEnvironment environment, - IServiceScopeFactory serviceScopeFactory, - IBlobFilePathCalculator blobFilePathCalculator, - IBlobContainerConfigurationProvider configurationProvider, - IOptions ossOptions) - : base(ossOptions, serviceScopeFactory) - { - CurrentTenant = currentTenant; - Environment = environment; - FilePathCalculator = blobFilePathCalculator; - ConfigurationProvider = configurationProvider; - } - - public override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) - { - var objectPath = !request.Path.IsNullOrWhiteSpace() - ? request.Path.EnsureEndsWith('/') - : ""; - var filesPath = request.Objects.Select(x => CalculateFilePath(request.Bucket, objectPath + x)); - - foreach (var file in filesPath) - { - if (Directory.Exists(file)) - { - if (Directory.GetFileSystemEntries(file).Length > 0) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithNotEmpty); - // throw new ContainerDeleteWithNotEmptyException("00101", $"Can't not delete container {name}, because it is not empty!"); - } - Directory.Delete(file); - } - else if (File.Exists(file)) - { - File.Delete(file); - } - } - - return Task.CompletedTask; - } - - public override Task CreateAsync(string name) - { - var filePath = CalculateFilePath(name); - ThrowOfPathHasTooLong(filePath); - if (!Directory.Exists(filePath)) - { - Directory.CreateDirectory(filePath); - } - - var directoryInfo = new DirectoryInfo(filePath); - var container = new OssContainer( - directoryInfo.Name, - directoryInfo.CreationTime, - 0L, - directoryInfo.LastWriteTime, - new Dictionary - { - { "LastAccessTime", directoryInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }); - - return Task.FromResult(container); - } - - public virtual Task ExpireAsync(ExprieOssObjectRequest request) - { - var filePath = CalculateFilePath(request.Bucket); - - DirectoryHelper.CreateIfNotExists(filePath); - - // 目录也属于Oss对象,需要抽象的文件系统集合来存储 - var fileSystems = Directory.GetFileSystemEntries(filePath) - .Select(ConvertFileSystem) - .Where(file => file.CreationTime <= request.ExpirationTime) - .OrderBy(file => file.CreationTime) - .Take(request.Batch) - .Select(file => file.FullName); - - static FileSystemInfo ConvertFileSystem(string path) - { - if (File.Exists(path)) - { - return new FileInfo(path); - } - - return new DirectoryInfo(path); - } - - foreach (var fileSystem in fileSystems) - { - FileHelper.DeleteIfExists(fileSystem); - DirectoryHelper.DeleteIfExists(fileSystem, true); - } - - return Task.CompletedTask; - } - - public override Task ObjectExistsAsync(GetOssObjectRequest request) - { - var objectPath = !request.Path.IsNullOrWhiteSpace() - ? request.Path.EnsureEndsWith('/') - : ""; - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - var filePath = CalculateFilePath(request.Bucket, objectName); - - var objectExists = File.Exists(filePath) || Directory.Exists(filePath); - - return Task.FromResult(objectExists); - } - - public async override Task CreateObjectAsync(CreateOssObjectRequest request) - { - var objectPath = !request.Path.IsNullOrWhiteSpace() - ? request.Path.EnsureEndsWith('/') - : ""; - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - var filePath = CalculateFilePath(request.Bucket, objectName); - if (!request.Content.IsNullOrEmpty()) - { - ThrowOfPathHasTooLong(filePath); - - if (!request.Overwrite && File.Exists(filePath)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - // throw new OssObjectAlreadyExistsException($"Can't not put object {objectName} in container {request.Bucket}, Because a file with the same name already exists in the directory!"); - } - - DirectoryHelper.CreateIfNotExists(Path.GetDirectoryName(filePath)); - - string fileMd5 = ""; - FileMode fileMode = request.Overwrite ? FileMode.Create : FileMode.CreateNew; - using (var fileStream = File.Open(filePath, fileMode, FileAccess.ReadWrite)) - { - await request.Content.CopyToAsync(fileStream); - - fileMd5 = fileStream.MD5(); - - await fileStream.FlushAsync(); - } - - var fileInfo = new FileInfo(filePath); - var ossObject = new OssObject( - fileInfo.Name, - objectPath, - fileMd5, - fileInfo.CreationTime, - fileInfo.Length, - fileInfo.LastWriteTime, - new Dictionary - { - { "IsReadOnly", fileInfo.IsReadOnly.ToString() }, - { "LastAccessTime", fileInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }) - { - FullName = fileInfo.FullName.Replace(Environment.ContentRootPath, "") - }; - ossObject.SetContent(request.Content); - - return ossObject; - } - else - { - ThrowOfPathHasTooLong(filePath); - if (Directory.Exists(filePath)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - // throw new OssObjectAlreadyExistsException($"Can't not put object {objectName} in container {request.Bucket}, Because a file with the same name already exists in the directory!"); - } - Directory.CreateDirectory(filePath); - var directoryInfo = new DirectoryInfo(filePath); - - var ossObject = new OssObject( - directoryInfo.Name.EnsureEndsWith('/'), - objectPath, - "", - directoryInfo.CreationTime, - 0L, - directoryInfo.LastWriteTime, - new Dictionary - { - { "LastAccessTime", directoryInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }, - true) - { - FullName = directoryInfo.FullName.Replace(Environment.ContentRootPath, "") - }; - ossObject.SetContent(request.Content); - - return ossObject; - } - } - - protected override Task DeleteBucketAsync(string name) - { - var filePath = CalculateFilePath(name); - if (!Directory.Exists(filePath)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - // 非空目录无法删除 - if (Directory.GetFileSystemEntries(filePath).Length > 0) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithNotEmpty); - // throw new ContainerDeleteWithNotEmptyException("00101", $"Can't not delete container {name}, because it is not empty!"); - } - Directory.Delete(filePath); - - return Task.CompletedTask; - } - - public override Task DeleteObjectAsync(GetOssObjectRequest request) - { - var objectName = request.Path.IsNullOrWhiteSpace() - ? request.Object - : request.Path.EnsureEndsWith('/') + request.Object; - var filePath = CalculateFilePath(request.Bucket, objectName); - if (File.Exists(filePath)) - { - File.Delete(filePath); - } - else if (Directory.Exists(filePath)) - { - if (Directory.GetFileSystemEntries(filePath).Length > 0) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectDeleteWithNotEmpty); - } - Directory.Delete(filePath); - } - - return Task.CompletedTask; - } - - public override Task ExistsAsync(string name) - { - var filePath = CalculateFilePath(name); - - return Task.FromResult(Directory.Exists(filePath)); - } - - public override Task GetAsync(string name) - { - var filePath = CalculateFilePath(name); - if (!Directory.Exists(filePath)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {name} in file system"); - } - - var directoryInfo = new DirectoryInfo(filePath); - var container = new OssContainer( - directoryInfo.Name, - directoryInfo.CreationTime, - 0L, - directoryInfo.LastWriteTime, - new Dictionary - { - { "LastAccessTime", directoryInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }); - - return Task.FromResult(container); - } - - protected override Task GetOssObjectAsync(GetOssObjectRequest request) - { - var objectPath = !request.Path.IsNullOrWhiteSpace() - ? request.Path.EnsureEndsWith('/') - : ""; - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - var filePath = CalculateFilePath(request.Bucket, objectName); - if (!File.Exists(filePath)) - { - if (!Directory.Exists(filePath) && !request.CreatePathIsNotExists) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - // throw new ContainerNotFoundException($"Can't not found object {objectName} in container {request.Bucket} with file system"); - } - - DirectoryHelper.CreateIfNotExists(filePath); - - var directoryInfo = new DirectoryInfo(filePath); - var ossObject = new OssObject( - directoryInfo.Name.EnsureEndsWith('/'), - objectPath, - "", - directoryInfo.CreationTime, - 0L, - directoryInfo.LastWriteTime, - new Dictionary - { - { "LastAccessTime", directoryInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }, - true) - { - FullName = directoryInfo.FullName.Replace(Environment.ContentRootPath, "") - }; - return Task.FromResult(ossObject); - } - else - { - var fileInfo = new FileInfo(filePath); - var fileStream = File.OpenRead(filePath); - var ossObject = new OssObject( - fileInfo.Name, - objectPath, - request.MD5 ? fileStream.MD5() : "", - fileInfo.CreationTime, - fileInfo.Length, - fileInfo.LastWriteTime, - new Dictionary - { - { "IsReadOnly", fileInfo.IsReadOnly.ToString() }, - { "LastAccessTime", fileInfo.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }) - { - FullName = fileInfo.FullName.Replace(Environment.ContentRootPath, "") - }; - - ossObject.SetContent(fileStream); - - return Task.FromResult(ossObject); - } - } - - public override Task GetListAsync(GetOssContainersRequest request) - { - // 不传递Bucket 检索根目录的Bucket - var filePath = CalculateFilePath(null); - - // 获取根目录 - var directories = Directory.GetDirectories(filePath, request.Prefix ?? "*.*"); - - // 排序目录 - Array.Sort(directories, delegate (string x, string y) - { - return x.CompareTo(y); - }); - // 容器对应的目录信息集合 - // 本地文件系统直接用PageBy即可 - var directoryInfos = directories - .AsQueryable() - .PageBy(request.Current, request.MaxKeys ?? 10) - .Select(file => new DirectoryInfo(file)) - .ToArray(); - var nextMarkerIndex = directories.FindIndex(x => x.EndsWith(directoryInfos[directoryInfos.Length - 1].Name)); - string nextMarker = ""; - if (nextMarkerIndex >= 0 && nextMarkerIndex + 1 < directories.Length) - { - nextMarker = directories[nextMarkerIndex + 1]; - nextMarker = new DirectoryInfo(nextMarker).Name; - } - // 返回Oss容器描述集合 - var response = new GetOssContainersResponse( - request.Prefix, - request.Marker, - nextMarker, - directories.Length, - directoryInfos.Select(x => new OssContainer( - x.Name, - x.CreationTime, - 0L, - x.LastWriteTime, - new Dictionary - { - { "LastAccessTime", x.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - })) - .ToList()); - - return Task.FromResult(response); - } - - public override Task GetObjectsAsync(GetOssObjectsRequest request) - { - // 先定位检索的目录 - var filePath = CalculateFilePath(request.BucketName, request.Prefix); - if (!Directory.Exists(filePath) && !request.CreatePathIsNotExists) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {request.BucketName} in file system"); - } - DirectoryHelper.CreateIfNotExists(filePath); - // 目录也属于Oss对象,需要抽象的文件系统集合来存储 - var fileSystemNames = string.Equals(request.Delimiter, "/") - ? Directory.GetDirectories(filePath) - : Directory.GetFileSystemEntries(filePath); - - // 排序所有文件与目录 - Array.Sort(fileSystemNames, delegate (string x, string y) - { - // 检索的是文件系统名称 - // 需要判断是否为文件夹进行升序排序 - // 参考 OssObjectComparer - - var xFolder = Directory.Exists(x); - var yFolder = Directory.Exists(y); - - if (xFolder && yFolder) - { - return x.CompareTo(y); - } - - if (xFolder && !yFolder) - { - return -1; - } - - if (!xFolder && yFolder) - { - return 1; - } - - return x.CompareTo(y); - }); - - //// 需要计算从哪个位置截断 - //int markIndex = 0; - //if (!request.Marker.IsNullOrWhiteSpace()) - //{ - // markIndex = fileSystemNames.FindIndex(x => x.EndsWith(request.Marker)); - // if (markIndex < 0) - // { - // markIndex = 0; - // } - //} - - //// 需要截断Oss对象列表 - //var copyFileSystemNames = fileSystemNames; - //if (markIndex > 0) - //{ - // // fix: 翻页查询数组可能引起下标越界 - // // copyFileSystemNames = fileSystemNames[(markIndex+1)..]; - // copyFileSystemNames = fileSystemNames[markIndex..]; - //} - // Oss对象信息集合 - - static FileSystemInfo ConvertFileSystem(string path) - { - if (File.Exists(path)) - { - return new FileInfo(path); - } - - return new DirectoryInfo(path); - } - - var fileSystems = fileSystemNames - .AsQueryable() - .PageBy(request.Current, request.MaxKeys ?? 10) - .Select(ConvertFileSystem) - .ToArray(); - - var nextMarkerIndex = -1; - if (fileSystems.Length > 0) - { - // 计算下一页起始标记文件/目录名称 - nextMarkerIndex = fileSystemNames.FindIndex(x => x.EndsWith(fileSystems[^1].Name)); - } - var nextMarker = ""; - if (nextMarkerIndex >= 0 && nextMarkerIndex + 1 < fileSystemNames.Length) - { - nextMarker = fileSystemNames[nextMarkerIndex + 1]; - nextMarker = File.Exists(nextMarker) - ? new FileInfo(nextMarker).Name - : new DirectoryInfo(nextMarker).Name.EnsureEndsWith('/'); - } - // 返回Oss对象描述集合 - var response = new GetOssObjectsResponse( - request.BucketName, - request.Prefix, - request.Marker, - nextMarker, - "/", // 文件系统目录分隔符 - fileSystemNames.Length, - fileSystems.Select(x => new OssObject( - (x is DirectoryInfo) ? x.Name.EnsureEndsWith('/') : x.Name, - request.Prefix, - request.MD5 ? (x as FileInfo)?.OpenRead().MD5() ?? "" : "", - x.CreationTime, - (x as FileInfo)?.Length ?? 0L, - x.LastWriteTime, - new Dictionary - { - { "LastAccessTime", x.LastAccessTime.ToString("yyyy-MM-dd HH:mm:ss") } - }, - x is DirectoryInfo) - { - FullName = x.FullName.Replace(Environment.ContentRootPath, "") - }) - .ToList()); - - return Task.FromResult(response); - } - - protected virtual FileSystemBlobProviderConfiguration GetFileSystemConfiguration() - { - var configuration = ConfigurationProvider.Get(); - var fileSystemConfiguration = configuration.GetFileSystemConfiguration(); - return fileSystemConfiguration; - } - - protected virtual string CalculateFilePath(string bucketName, string blobName = "") - { - var fileSystemConfiguration = GetFileSystemConfiguration(); - var blobPath = fileSystemConfiguration.BasePath; - - if (CurrentTenant.Id == null) - { - blobPath = Path.Combine(blobPath, "host"); - } - else - { - blobPath = Path.Combine(blobPath, "tenants", CurrentTenant.Id.Value.ToString("D")); - } - // fix bug: 新租户可能无法检索不存在的目录,blob的根目录将自动创建 - DirectoryHelper.CreateIfNotExists(blobPath); - - if (fileSystemConfiguration.AppendContainerNameToBasePath && - !bucketName.IsNullOrWhiteSpace()) - { - blobPath = Path.Combine(blobPath, bucketName); - } - if (!blobName.IsNullOrWhiteSpace()) - { - // fix: If the user passes /, the disk root directory is retrieved - blobName = blobName.Equals("/") ? "./" : blobName; - blobPath = Path.Combine(blobPath, blobName); - } - - return blobPath; - } - - private void ThrowOfPathHasTooLong(string path) - { - // Windows 133 260 - // Linux 255 4096 - //if (RuntimeInformation.IsOSPlatform(OSPlatform.Windows) && path.Length >= 255) // 预留5位 - //{ - // throw new BusinessException(code: OssManagementErrorCodes.OssNameHasTooLong); - //} - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs deleted file mode 100644 index de3522f53..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/LINGYUN/Abp/OssManagement/FileSystem/FileSystemOssContainerFactory.cs +++ /dev/null @@ -1,45 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Hosting; -using Microsoft.Extensions.Options; -using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.FileSystem; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.FileSystem; - -public class FileSystemOssContainerFactory : IOssContainerFactory -{ - protected ICurrentTenant CurrentTenant { get; } - protected IHostEnvironment Environment { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - protected IBlobFilePathCalculator FilePathCalculator { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - protected IOptions Options { get; } - - public FileSystemOssContainerFactory( - ICurrentTenant currentTenant, - IHostEnvironment environment, - IServiceScopeFactory serviceScopeFactory, - IBlobFilePathCalculator blobFilePathCalculator, - IBlobContainerConfigurationProvider configurationProvider, - IOptions options) - { - Options = options; - Environment = environment; - CurrentTenant = currentTenant; - ServiceScopeFactory = serviceScopeFactory; - FilePathCalculator = blobFilePathCalculator; - ConfigurationProvider = configurationProvider; - } - - public IOssContainer Create() - { - return new FileSystemOssContainer( - CurrentTenant, - Environment, - ServiceScopeFactory, - FilePathCalculator, - ConfigurationProvider, - Options); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/Microsoft/Extensions/DependencyInjection/FileSystemOssContainerServiceCollectionExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/Microsoft/Extensions/DependencyInjection/FileSystemOssContainerServiceCollectionExtensions.cs deleted file mode 100644 index 7d85d395f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/Microsoft/Extensions/DependencyInjection/FileSystemOssContainerServiceCollectionExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.FileSystem; -using System; - -namespace Microsoft.Extensions.DependencyInjection; - -public static class FileSystemOssContainerServiceCollectionExtensions -{ - public static IServiceCollection AddFileSystemContainer(this IServiceCollection services) - { - services.AddTransient(); - - services.AddTransient(provider => - provider - .GetRequiredService() - .Create() - .As()); - - return services; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.EN.md deleted file mode 100644 index 8554b7730..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.EN.md +++ /dev/null @@ -1,45 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem - -Local file system OSS container interface implementation - -## Features - -* Implements object storage management based on local file system -* Supports basic operations including file upload, download, and deletion -* Supports file sharding upload and breakpoint continuation -* Supports automatic creation and management of file directories -* Supports file system-based access control -* Supports storage and management of file metadata - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Configuration Details - -Required configuration items: -* BasePath: Base path for file storage -* AppendContainerNameToBasePath: Whether to append container name to base path -* HttpServer: HTTP server configuration - * Scheme: Protocol scheme (http/https) - * Host: Host address - * Port: Port number - -## Related Modules - -* LINGYUN.Abp.OssManagement.FileSystem.ImageSharp: Provides image processing functionality -* LINGYUN.Abp.OssManagement.FileSystem.Imaging: Provides basic image functionality support -* LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp: ImageSharp-based image processing implementation - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.md deleted file mode 100644 index f578d8014..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/README.md +++ /dev/null @@ -1,45 +0,0 @@ -# LINGYUN.Abp.OssManagement.FileSystem - -本地文件系统oss容器接口 - -## 功能 - -* 实现基于本地文件系统的对象存储管理 -* 支持文件上传、下载、删除等基本操作 -* 支持文件分片上传和断点续传 -* 支持文件目录的自动创建和管理 -* 支持基于文件系统的访问控制 -* 支持文件元数据的存储和管理 - -## 配置使用 - -模块按需引用 - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 配置说明 - -需要配置以下关键信息: -* BasePath:文件存储的基础路径 -* AppendContainerNameToBasePath:是否将容器名称附加到基础路径 -* HttpServer:HTTP服务器配置 - * Scheme:协议方案(http/https) - * Host:主机地址 - * Port:端口号 - -## 相关模块 - -* LINGYUN.Abp.OssManagement.FileSystem.ImageSharp:提供图像处理功能 -* LINGYUN.Abp.OssManagement.FileSystem.Imaging:提供基础图像功能支持 -* LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp:基于ImageSharp的图像处理实现 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/ByteExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/ByteExtensions.cs deleted file mode 100644 index ccf86b05c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/ByteExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; - -namespace System; -public static class ByteExtensions -{ - private readonly static string[] ImageTypes = new string[] - { - "6677",// bmp - "7173",// gif - "13780",// png - "255216"// jpg - }; - - public static bool IsImage(this byte[] fileBytes) - { - if (fileBytes.IsNullOrEmpty()) - { - return false; - } - - string fileclass = ""; - for (int i = 0; i < 2; i++) - { - fileclass += fileBytes[i].ToString(); - } - - return ImageTypes.Any(type => type.Equals(fileclass)); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/StringArrayArgsExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/StringArrayArgsExtensions.cs deleted file mode 100644 index fdad716e9..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.FileSystem/System/StringArrayArgsExtensions.cs +++ /dev/null @@ -1,31 +0,0 @@ -using System.Linq; - -namespace System; -public static class StringArrayArgsExtensions -{ - public static string GetStringPrarm(this string[] args, string key) - { - if (!args.Any()) - { - return null; - } - - return args - .Where(arg => arg.StartsWith(key)) - .Select(arg => arg.Substring(key.Length)) - .FirstOrDefault(); - } - - public static string GetInt32Prarm(this string[] args, string key) - { - if (!args.Any()) - { - return null; - } - - return args - .Where(arg => arg.StartsWith(key)) - .Select(arg => arg.Substring(key.Length)) - .FirstOrDefault(arg => int.TryParse(arg, out _)); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.Generated.cs deleted file mode 100644 index 7e5564ba8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.Generated.cs +++ /dev/null @@ -1,54 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Integration; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement.Integration; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IOssObjectIntegrationService), typeof(OssObjectIntegrationClientProxy))] -[IntegrationService] -public partial class OssObjectIntegrationClientProxy : ClientProxyBase, IOssObjectIntegrationService -{ - public virtual async Task CreateAsync(CreateOssObjectInput input) - { - return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue - { - { typeof(CreateOssObjectInput), input } - }); - } - - public virtual async Task DeleteAsync(GetOssObjectInput input) - { - await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task ExistsAsync(GetOssObjectInput input) - { - return await RequestAsync(nameof(ExistsAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task GetAsync(GetOssObjectInput input) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.cs deleted file mode 100644 index 49dc5b8b7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of OssObjectIntegrationClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement.Integration; - -public partial class OssObjectIntegrationClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.Generated.cs deleted file mode 100644 index 919b8d23a..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.Generated.cs +++ /dev/null @@ -1,59 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IOssContainerAppService), typeof(OssContainerClientProxy))] -public partial class OssContainerClientProxy : ClientProxyBase, IOssContainerAppService -{ - public virtual async Task CreateAsync(string name) - { - return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue - { - { typeof(string), name } - }); - } - - public virtual async Task DeleteAsync(string name) - { - await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(string), name } - }); - } - - public virtual async Task GetAsync(string name) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(string), name } - }); - } - - public virtual async Task GetListAsync(GetOssContainersInput input) - { - return await RequestAsync(nameof(GetListAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssContainersInput), input } - }); - } - - public virtual async Task GetObjectListAsync(GetOssObjectsInput input) - { - return await RequestAsync(nameof(GetObjectListAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectsInput), input } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.cs deleted file mode 100644 index 55ae1dfc5..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssContainerClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of OssContainerClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -public partial class OssContainerClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.Generated.cs deleted file mode 100644 index bc472cc34..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.Generated.cs +++ /dev/null @@ -1,76 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IOssObjectAppService), typeof(OssObjectClientProxy))] -public partial class OssObjectClientProxy : ClientProxyBase, IOssObjectAppService -{ - public virtual async Task CreateAsync(CreateOssObjectInput input) - { - return await RequestAsync(nameof(CreateAsync), new ClientProxyRequestTypeValue - { - { typeof(CreateOssObjectInput), input } - }); - } - - public virtual async Task BulkDeleteAsync(BulkDeleteOssObjectInput input) - { - await RequestAsync(nameof(BulkDeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(BulkDeleteOssObjectInput), input } - }); - } - - public virtual async Task DeleteAsync(GetOssObjectInput input) - { - await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task GetAsync(GetOssObjectInput input) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task GetContentAsync(GetOssObjectInput input) - { - return await RequestAsync(nameof(GetContentAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task GenerateUrlAsync(GetOssObjectInput input) - { - return await RequestAsync(nameof(GenerateUrlAsync), new ClientProxyRequestTypeValue - { - { typeof(GetOssObjectInput), input } - }); - } - - public virtual async Task DownloadAsync(string urlKey) - { - return await RequestAsync(nameof(DownloadAsync), new ClientProxyRequestTypeValue - { - { typeof(string), urlKey } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.cs deleted file mode 100644 index 8f562ff69..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/OssObjectClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of OssObjectClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -public partial class OssObjectClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.Generated.cs deleted file mode 100644 index e6e687ad2..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.Generated.cs +++ /dev/null @@ -1,73 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IPrivateFileAppService), typeof(PrivateFilesClientProxy))] -public partial class PrivateFilesClientProxy : ClientProxyBase, IPrivateFileAppService -{ - public virtual async Task UploadAsync(UploadFileInput input) - { - return await RequestAsync(nameof(UploadAsync), new ClientProxyRequestTypeValue - { - { typeof(UploadFileInput), input } - }); - } - - public virtual async Task UploadChunkAsync(UploadFileChunkInput input) - { - await RequestAsync(nameof(UploadChunkAsync), new ClientProxyRequestTypeValue - { - { typeof(UploadFileChunkInput), input } - }); - } - - public virtual async Task> GetListAsync(GetFilesInput input) - { - return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue - { - { typeof(GetFilesInput), input } - }); - } - - public virtual async Task GetAsync(GetPublicFileInput input) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(GetPublicFileInput), input } - }); - } - - public virtual async Task DeleteAsync(GetPublicFileInput input) - { - await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(GetPublicFileInput), input } - }); - } - - public virtual async Task> GetShareListAsync() - { - return await RequestAsync>(nameof(GetShareListAsync)); - } - - public virtual async Task ShareAsync(FileShareInput input) - { - return await RequestAsync(nameof(ShareAsync), new ClientProxyRequestTypeValue - { - { typeof(FileShareInput), input } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.cs deleted file mode 100644 index f0773a784..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PrivateFilesClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of PrivateFilesClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -public partial class PrivateFilesClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.Generated.cs deleted file mode 100644 index f2d593e18..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.Generated.cs +++ /dev/null @@ -1,60 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IPublicFileAppService), typeof(PublicFilesClientProxy))] -public partial class PublicFilesClientProxy : ClientProxyBase, IPublicFileAppService -{ - public virtual async Task UploadAsync(UploadFileInput input) - { - return await RequestAsync(nameof(UploadAsync), new ClientProxyRequestTypeValue - { - { typeof(UploadFileInput), input } - }); - } - - public virtual async Task UploadChunkAsync(UploadFileChunkInput input) - { - await RequestAsync(nameof(UploadChunkAsync), new ClientProxyRequestTypeValue - { - { typeof(UploadFileChunkInput), input } - }); - } - - public virtual async Task> GetListAsync(GetFilesInput input) - { - return await RequestAsync>(nameof(GetListAsync), new ClientProxyRequestTypeValue - { - { typeof(GetFilesInput), input } - }); - } - - public virtual async Task GetAsync(GetPublicFileInput input) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(GetPublicFileInput), input } - }); - } - - public virtual async Task DeleteAsync(GetPublicFileInput input) - { - await RequestAsync(nameof(DeleteAsync), new ClientProxyRequestTypeValue - { - { typeof(GetPublicFileInput), input } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.cs deleted file mode 100644 index 8fdb18270..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/PublicFilesClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of PublicFilesClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -public partial class PublicFilesClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.Generated.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.Generated.cs deleted file mode 100644 index aa8491289..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.Generated.cs +++ /dev/null @@ -1,28 +0,0 @@ -// This file is automatically generated by ABP framework to use MVC Controllers from CSharp -using LINGYUN.Abp.OssManagement; -using System; -using System.Collections.Generic; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.Content; -using Volo.Abp.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Http.Client.ClientProxying; -using Volo.Abp.Http.Modeling; - -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -[Dependency(ReplaceServices = true)] -[ExposeServices(typeof(IStaticFilesAppService), typeof(StaticFilesClientProxy))] -public partial class StaticFilesClientProxy : ClientProxyBase, IStaticFilesAppService -{ - public virtual async Task GetAsync(GetStaticFileInput input) - { - return await RequestAsync(nameof(GetAsync), new ClientProxyRequestTypeValue - { - { typeof(GetStaticFileInput), input } - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.cs deleted file mode 100644 index bb107d230..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/LINGYUN/Abp/OssManagement/StaticFilesClientProxy.cs +++ /dev/null @@ -1,7 +0,0 @@ -// This file is part of StaticFilesClientProxy, you can customize it here -// ReSharper disable once CheckNamespace -namespace LINGYUN.Abp.OssManagement; - -public partial class StaticFilesClientProxy -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/oss-management-generate-proxy.json b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/oss-management-generate-proxy.json deleted file mode 100644 index df42ee8ab..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/ClientProxies/oss-management-generate-proxy.json +++ /dev/null @@ -1,2796 +0,0 @@ -{ - "modules": { - "oss-management": { - "rootPath": "oss-management", - "remoteServiceName": "AbpOssManagement", - "controllers": { - "LINGYUN.Abp.OssManagement.Integration.OssObjectIntegrationController": { - "controllerName": "OssObjectIntegration", - "controllerGroupName": "OssObjectIntegration", - "isRemoteService": true, - "isIntegrationService": true, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.Integration.OssObjectIntegrationController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.Integration.IOssObjectIntegrationService", - "name": "IOssObjectIntegrationService", - "methods": [ - { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.CreateOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "ExistsAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.Integration.GetOssObjectExistsResult", - "typeSimple": "LINGYUN.Abp.OssManagement.Integration.GetOssObjectExistsResult" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - } - ] - } - ], - "actions": { - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "integration-api/oss-management/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.CreateOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Overwrite", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ExpirationTime", - "jsonName": null, - "type": "System.TimeSpan?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.Integration.IOssObjectIntegrationService" - }, - "DeleteAsyncByInput": { - "uniqueName": "DeleteAsyncByInput", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "integration-api/oss-management/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.Integration.IOssObjectIntegrationService" - }, - "ExistsAsyncByInput": { - "uniqueName": "ExistsAsyncByInput", - "name": "ExistsAsync", - "httpMethod": "GET", - "url": "integration-api/oss-management/objects/exists", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.Integration.GetOssObjectExistsResult", - "typeSimple": "LINGYUN.Abp.OssManagement.Integration.GetOssObjectExistsResult" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.Integration.IOssObjectIntegrationService" - }, - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", - "httpMethod": "GET", - "url": "integration-api/oss-management/objects/download", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.Integration.IOssObjectIntegrationService" - } - } - }, - "LINGYUN.Abp.OssManagement.OssContainerController": { - "controllerName": "OssContainer", - "controllerGroupName": "OssContainer", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.OssContainerController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.IOssContainerAppService", - "name": "IOssContainerAppService", - "methods": [ - { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainerDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainerDto" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainerDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainerDto" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssContainersInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssContainersInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssContainersInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainersResultDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainersResultDto" - } - }, - { - "name": "GetObjectListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectsInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectsInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectsInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectsResultDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectsResultDto" - } - } - ] - } - ], - "actions": { - "CreateAsyncByName": { - "uniqueName": "CreateAsyncByName", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/oss-management/containes/{name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "name", - "name": "name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainerDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainerDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssContainerAppService" - }, - "DeleteAsyncByName": { - "uniqueName": "DeleteAsyncByName", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/oss-management/containes/{name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "name", - "name": "name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssContainerAppService" - }, - "GetAsyncByName": { - "uniqueName": "GetAsyncByName", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/oss-management/containes/{name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "name", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "name", - "name": "name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainerDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainerDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssContainerAppService" - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/oss-management/containes", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssContainersInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssContainersInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssContainersInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Prefix", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Marker", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssContainersResultDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssContainersResultDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssContainerAppService" - }, - "GetObjectListAsyncByInput": { - "uniqueName": "GetObjectListAsyncByInput", - "name": "GetObjectListAsync", - "httpMethod": "GET", - "url": "api/oss-management/containes/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectsInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectsInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectsInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Prefix", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Delimiter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Marker", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "EncodingType", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Sorting", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "SkipCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectsResultDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectsResultDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssContainerAppService" - } - } - }, - "LINGYUN.Abp.OssManagement.OssObjectController": { - "controllerName": "OssObject", - "controllerGroupName": "OssObject", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.OssObjectController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.IOssObjectAppService", - "name": "IOssObjectAppService", - "methods": [ - { - "name": "CreateAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.CreateOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - } - }, - { - "name": "GenerateUrlAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.String", - "typeSimple": "string" - } - }, - { - "name": "DownloadAsync", - "parametersOnMethod": [ - { - "name": "urlKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - }, - { - "name": "GetContentAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "BulkDeleteAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - ] - } - ], - "actions": { - "CreateAsyncByInput": { - "uniqueName": "CreateAsyncByInput", - "name": "CreateAsync", - "httpMethod": "POST", - "url": "api/oss-management/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.CreateOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Overwrite", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ExpirationTime", - "jsonName": null, - "type": "System.TimeSpan?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "UploadAsyncByInput": { - "uniqueName": "UploadAsyncByInput", - "name": "UploadAsync", - "httpMethod": "POST", - "url": "api/oss-management/objects/upload", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileChunkInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "CurrentChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkNumber", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalChunks", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.OssObjectController" - }, - "BulkDeleteAsyncByInput": { - "uniqueName": "BulkDeleteAsyncByInput", - "name": "BulkDeleteAsync", - "httpMethod": "POST", - "url": "api/oss-management/objects/bulk-delete", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.BulkDeleteOssObjectInput", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "DeleteAsyncByInput": { - "uniqueName": "DeleteAsyncByInput", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/oss-management/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/oss-management/objects", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "GetContentAsyncByInput": { - "uniqueName": "GetContentAsyncByInput", - "name": "GetContentAsync", - "httpMethod": "GET", - "url": "api/oss-management/objects/download", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "GenerateUrlAsyncByInput": { - "uniqueName": "GenerateUrlAsyncByInput", - "name": "GenerateUrlAsync", - "httpMethod": "GET", - "url": "api/oss-management/objects/generate-url", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MD5", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.String", - "typeSimple": "string" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - }, - "DownloadAsyncByUrlKey": { - "uniqueName": "DownloadAsyncByUrlKey", - "name": "DownloadAsync", - "httpMethod": "GET", - "url": "api/oss-management/objects/download/{urlKey}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "urlKey", - "typeAsString": "System.String, System.Private.CoreLib", - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "urlKey", - "name": "urlKey", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IOssObjectAppService" - } - } - }, - "LINGYUN.Abp.OssManagement.PrivateFilesController": { - "controllerName": "PrivateFiles", - "controllerGroupName": "PrivateFiles", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.PrivateFilesController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.IPrivateFileAppService", - "name": "IPrivateFileAppService", - "methods": [ - { - "name": "ShareAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.FileShareInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.FileShareInput", - "typeSimple": "LINGYUN.Abp.OssManagement.FileShareInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.FileShareDto", - "typeSimple": "LINGYUN.Abp.OssManagement.FileShareDto" - } - }, - { - "name": "GetShareListAsync", - "parametersOnMethod": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - { - "name": "UploadAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetFilesInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetFilesInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetFilesInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - { - "name": "UploadChunkAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileChunkInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - ] - } - ], - "actions": { - "UploadAsyncByInput": { - "uniqueName": "UploadAsyncByInput", - "name": "UploadAsync", - "httpMethod": "POST", - "url": "api/files/private", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Overwrite", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "UploadChunkAsyncByInput": { - "uniqueName": "UploadChunkAsyncByInput", - "name": "UploadChunkAsync", - "httpMethod": "POST", - "url": "api/files/private/upload", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileChunkInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "CurrentChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkNumber", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalChunks", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/files/private/search", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetFilesInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetFilesInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetFilesInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/files/private/{Name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "DeleteAsyncByInput": { - "uniqueName": "DeleteAsyncByInput", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/files/private", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Process", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TenantId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "GetShareListAsync": { - "uniqueName": "GetShareListAsync", - "name": "GetShareListAsync", - "httpMethod": "GET", - "url": "api/files/private/share", - "supportedVersions": [], - "parametersOnMethod": [], - "parameters": [], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IPrivateFileAppService" - }, - "ShareAsyncByInput": { - "uniqueName": "ShareAsyncByInput", - "name": "ShareAsync", - "httpMethod": "POST", - "url": "api/files/private/share", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.FileShareInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.FileShareInput", - "typeSimple": "LINGYUN.Abp.OssManagement.FileShareInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "input", - "jsonName": null, - "type": "LINGYUN.Abp.OssManagement.FileShareInput", - "typeSimple": "LINGYUN.Abp.OssManagement.FileShareInput", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Body", - "descriptorName": "" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.FileShareDto", - "typeSimple": "LINGYUN.Abp.OssManagement.FileShareDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IPrivateFileAppService" - } - } - }, - "LINGYUN.Abp.OssManagement.PublicFilesController": { - "controllerName": "PublicFiles", - "controllerGroupName": "PublicFiles", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.PublicFilesController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.IPublicFileAppService", - "name": "IPublicFileAppService", - "methods": [ - { - "name": "UploadAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - } - }, - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - }, - { - "name": "GetListAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetFilesInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetFilesInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetFilesInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - } - }, - { - "name": "UploadChunkAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileChunkInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - }, - { - "name": "DeleteAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - } - } - ] - } - ], - "actions": { - "UploadAsyncByInput": { - "uniqueName": "UploadAsyncByInput", - "name": "UploadAsync", - "httpMethod": "POST", - "url": "api/files/public", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Object", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Overwrite", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "UploadChunkAsyncByInput": { - "uniqueName": "UploadChunkAsyncByInput", - "name": "UploadChunkAsync", - "httpMethod": "POST", - "url": "api/files/public/upload", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.UploadFileChunkInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "typeSimple": "LINGYUN.Abp.OssManagement.UploadFileChunkInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "CurrentChunkSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ChunkNumber", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalChunks", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TotalSize", - "jsonName": null, - "type": "System.Int64", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "GetListAsyncByInput": { - "uniqueName": "GetListAsyncByInput", - "name": "GetListAsync", - "httpMethod": "GET", - "url": "api/files/public/search", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetFilesInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetFilesInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetFilesInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Filter", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "MaxResultCount", - "jsonName": null, - "type": "System.Int32", - "typeSimple": "number", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Application.Dtos.ListResultDto", - "typeSimple": "Volo.Abp.Application.Dtos.ListResultDto" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/files/public/{Name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - }, - "DeleteAsyncByInput": { - "uniqueName": "DeleteAsyncByInput", - "name": "DeleteAsync", - "httpMethod": "DELETE", - "url": "api/files/public", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetPublicFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetPublicFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Process", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "TenantId", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "ModelBinding", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "System.Void", - "typeSimple": "System.Void" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IFileAppService" - } - } - }, - "LINGYUN.Abp.OssManagement.StaticFilesController": { - "controllerName": "StaticFiles", - "controllerGroupName": "StaticFiles", - "isRemoteService": true, - "isIntegrationService": false, - "apiVersion": null, - "type": "LINGYUN.Abp.OssManagement.StaticFilesController", - "interfaces": [ - { - "type": "LINGYUN.Abp.OssManagement.IStaticFilesAppService", - "name": "IStaticFilesAppService", - "methods": [ - { - "name": "GetAsync", - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetStaticFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetStaticFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetStaticFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - } - } - ] - } - ], - "actions": { - "UploadAsyncByInput": { - "uniqueName": "UploadAsyncByInput", - "name": "UploadAsync", - "httpMethod": "POST", - "url": "api/files/static", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.CreateOssObjectInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "typeSimple": "LINGYUN.Abp.OssManagement.CreateOssObjectInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Path", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "FileName", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Overwrite", - "jsonName": null, - "type": "System.Boolean", - "typeSimple": "boolean", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "File", - "jsonName": null, - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "FormFile", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "ExpirationTime", - "jsonName": null, - "type": "System.TimeSpan?", - "typeSimple": "string?", - "isOptional": false, - "defaultValue": null, - "constraintTypes": null, - "bindingSourceId": "Form", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "LINGYUN.Abp.OssManagement.OssObjectDto", - "typeSimple": "LINGYUN.Abp.OssManagement.OssObjectDto" - }, - "allowAnonymous": false, - "implementFrom": "LINGYUN.Abp.OssManagement.StaticFilesController" - }, - "GetAsyncByInput": { - "uniqueName": "GetAsyncByInput", - "name": "GetAsync", - "httpMethod": "GET", - "url": "api/files/static/{Bucket}/{Name}", - "supportedVersions": [], - "parametersOnMethod": [ - { - "name": "input", - "typeAsString": "LINGYUN.Abp.OssManagement.GetStaticFileInput, LINGYUN.Abp.OssManagement.Application.Contracts", - "type": "LINGYUN.Abp.OssManagement.GetStaticFileInput", - "typeSimple": "LINGYUN.Abp.OssManagement.GetStaticFileInput", - "isOptional": false, - "defaultValue": null - } - ], - "parameters": [ - { - "nameOnMethod": "input", - "name": "Name", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "input" - }, - { - "nameOnMethod": "input", - "name": "Bucket", - "jsonName": null, - "type": "System.String", - "typeSimple": "string", - "isOptional": false, - "defaultValue": null, - "constraintTypes": [], - "bindingSourceId": "Path", - "descriptorName": "input" - } - ], - "returnValue": { - "type": "Volo.Abp.Content.IRemoteStreamContent", - "typeSimple": "Volo.Abp.Content.IRemoteStreamContent" - }, - "allowAnonymous": null, - "implementFrom": "LINGYUN.Abp.OssManagement.IStaticFilesAppService" - } - } - } - } - } - }, - "types": {} -} \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiClientModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiClientModule.cs deleted file mode 100644 index 299923cbd..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiClientModule.cs +++ /dev/null @@ -1,25 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.Http.Client; -using Volo.Abp.Modularity; -using Volo.Abp.VirtualFileSystem; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpOssManagementApplicationContractsModule), - typeof(AbpHttpClientModule))] -public class AbpOssManagementHttpApiClientModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.AddStaticHttpClientProxies( - typeof(AbpOssManagementApplicationContractsModule).Assembly, - OssManagementRemoteServiceConsts.RemoteServiceName - ); - - Configure(options => - { - options.FileSets.AddEmbedded(); - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.EN.md deleted file mode 100644 index 77e14fa3e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.EN.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.HttpApi.Client - -Object Storage Management HTTP API Client - -## Features - -* Provides HTTP API client proxy for object storage management -* Implements remote service calls -* Supports dynamic API client proxy generation - -## Usage - -1. Add module dependency: - -```csharp -[DependsOn(typeof(AbpOssManagementHttpApiClientModule))] -public class YourModule : AbpModule -{ - // ... -} -``` - -2. Configure remote services: - -```json -{ - "RemoteServices": { - "Default": { - "BaseUrl": "http://your-api-server/" - } - } -} -``` - -## Available Services - -* IOssContainerAppService: Container management service -* IOssObjectAppService: Object management service -* IPublicFileAppService: Public file service -* IPrivateFileAppService: Private file service -* IShareFileAppService: Shared file service -* IStaticFilesAppService: Static file service - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.md deleted file mode 100644 index 749d26a5c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi.Client/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.HttpApi.Client - -对象存储管理HTTP API客户端 - -## 功能 - -* 提供对象存储管理的HTTP API客户端代理 -* 实现远程服务调用 -* 支持动态API客户端代理生成 - -## 使用方式 - -1. 添加模块依赖: - -```csharp -[DependsOn(typeof(AbpOssManagementHttpApiClientModule))] -public class YourModule : AbpModule -{ - // ... -} -``` - -2. 配置远程服务: - -```json -{ - "RemoteServices": { - "Default": { - "BaseUrl": "http://your-api-server/" - } - } -} -``` - -## 可用服务 - -* IOssContainerAppService:容器管理服务 -* IOssObjectAppService:对象管理服务 -* IPublicFileAppService:公共文件服务 -* IPrivateFileAppService:私有文件服务 -* IShareFileAppService:共享文件服务 -* IStaticFilesAppService:静态文件服务 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiModule.cs deleted file mode 100644 index 4e1fe69f7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/AbpOssManagementHttpApiModule.cs +++ /dev/null @@ -1,46 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Microsoft.Extensions.DependencyInjection; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Authorization.Localization; -using Volo.Abp.Localization; -using Volo.Abp.Modularity; -using Volo.Abp.Validation.Localization; -using Volo.Abp.AspNetCore.Mvc.DataAnnotations; -using Volo.Abp.AspNetCore.Mvc.Localization; - -namespace LINGYUN.Abp.OssManagement; - -[DependsOn( - typeof(AbpOssManagementApplicationContractsModule), - typeof(AbpAspNetCoreMvcModule) - )] -public class AbpOssManagementHttpApiModule : AbpModule -{ - public override void PreConfigureServices(ServiceConfigurationContext context) - { - PreConfigure(mvcBuilder => - { - mvcBuilder.AddApplicationPartIfNotExists(typeof(AbpOssManagementHttpApiModule).Assembly); - }); - - PreConfigure(options => - { - options.AddAssemblyResource( - typeof(AbpOssManagementResource), - typeof(AbpOssManagementApplicationContractsModule).Assembly); - }); - } - - //public override void ConfigureServices(ServiceConfigurationContext context) - //{ - // Configure(options => - // { - // options.Resources - // .Get() - // .AddBaseTypes( - // typeof(AbpAuthorizationResource), - // typeof(AbpValidationResource) - // ); - // }); - //} -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationController.cs deleted file mode 100644 index 38371114c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/Integration/OssObjectIntegrationController.cs +++ /dev/null @@ -1,47 +0,0 @@ -using Asp.Versioning; -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement.Integration; - -[Area(OssManagementRemoteServiceConsts.ModuleName)] -[ControllerName("OssObjectIntegration")] -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Route($"integration-api/{OssManagementRemoteServiceConsts.ModuleName}/objects")] -public class OssObjectIntegrationController : AbpControllerBase, IOssObjectIntegrationService -{ - private readonly IOssObjectIntegrationService _service; - public OssObjectIntegrationController(IOssObjectIntegrationService service) - { - _service = service; - } - - [HttpPost] - public virtual Task CreateAsync([FromForm] CreateOssObjectInput input) - { - return _service.CreateAsync(input); - } - - [HttpDelete] - public virtual Task DeleteAsync(GetOssObjectInput input) - { - return _service.DeleteAsync(input); - } - - [HttpGet] - [Route("exists")] - public virtual Task ExistsAsync(GetOssObjectInput input) - { - return _service.ExistsAsync(input); - } - - [HttpGet] - [Route("download")] - public virtual Task GetAsync(GetOssObjectInput input) - { - return _service.GetAsync(input); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssContainerController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssContainerController.cs deleted file mode 100644 index f6595ea2f..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssContainerController.cs +++ /dev/null @@ -1,54 +0,0 @@ -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; - -namespace LINGYUN.Abp.OssManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("oss-management")] -[Route("api/oss-management/containes")] -public class OssContainerController : AbpControllerBase, IOssContainerAppService -{ - protected IOssContainerAppService OssContainerAppService { get; } - - public OssContainerController( - IOssContainerAppService ossContainerAppService) - { - OssContainerAppService = ossContainerAppService; - } - - [HttpPost] - [Route("{name}")] - public async virtual Task CreateAsync(string name) - { - return await OssContainerAppService.CreateAsync(name); - } - - [HttpDelete] - [Route("{name}")] - public async virtual Task DeleteAsync(string name) - { - await OssContainerAppService.DeleteAsync(name); - } - - [HttpGet] - [Route("{name}")] - public async virtual Task GetAsync(string name) - { - return await OssContainerAppService.GetAsync(name); - } - - [HttpGet] - public async virtual Task GetListAsync(GetOssContainersInput input) - { - return await OssContainerAppService.GetListAsync(input); - } - - [HttpGet] - [Route("objects")] - public async virtual Task GetObjectListAsync(GetOssObjectsInput input) - { - return await OssContainerAppService.GetObjectListAsync(input); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs deleted file mode 100644 index 346be5846..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/OssObjectController.cs +++ /dev/null @@ -1,90 +0,0 @@ -using LINGYUN.Abp.OssManagement.Permissions; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Auditing; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("oss-management")] -[Route("api/oss-management/objects")] -public class OssObjectController : AbpControllerBase, IOssObjectAppService -{ - protected IFileUploader FileUploader { get; } - protected IOssObjectAppService OssObjectAppService { get; } - - public OssObjectController( - IFileUploader fileUploader, - IOssObjectAppService ossObjectAppService) - { - FileUploader = fileUploader; - OssObjectAppService = ossObjectAppService; - } - - [HttpPost] - [Authorize(AbpOssManagementPermissions.OssObject.Create)] - public virtual Task CreateAsync([FromForm] CreateOssObjectInput input) - { - return OssObjectAppService.CreateAsync(input); - } - - [HttpPost] - [Route("upload")] - [DisableAuditing] - [Authorize(AbpOssManagementPermissions.OssObject.Create)] - public virtual Task UploadAsync([FromForm] UploadFileChunkInput input) - { - return FileUploader.UploadAsync(input); - } - - [HttpPost] - [Route("bulk-delete")] - [Authorize(AbpOssManagementPermissions.OssObject.Delete)] - public virtual Task BulkDeleteAsync(BulkDeleteOssObjectInput input) - { - return OssObjectAppService.BulkDeleteAsync(input); - } - - [HttpDelete] - [Authorize(AbpOssManagementPermissions.OssObject.Delete)] - public virtual Task DeleteAsync(GetOssObjectInput input) - { - return OssObjectAppService.DeleteAsync(input); - } - - [HttpGet] - [Authorize(AbpOssManagementPermissions.OssObject.Default)] - public virtual Task GetAsync(GetOssObjectInput input) - { - return OssObjectAppService.GetAsync(input); - } - - [HttpGet] - [Route("download")] - [Authorize(AbpOssManagementPermissions.OssObject.Download)] - [Obsolete("请使用 GenerateUrlAsync 与 DownloadAsync的组合")] - public virtual Task GetContentAsync(GetOssObjectInput input) - { - return OssObjectAppService.GetContentAsync(input); - } - - [HttpGet] - [Route("generate-url")] - [Authorize(AbpOssManagementPermissions.OssObject.Download)] - public virtual Task GenerateUrlAsync(GetOssObjectInput input) - { - return OssObjectAppService.GenerateUrlAsync(input); - } - - [HttpGet] - [Route("download/{urlKey}")] - public virtual Task DownloadAsync(string urlKey) - { - return OssObjectAppService.DownloadAsync(urlKey); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs deleted file mode 100644 index 18dd39183..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PrivateFilesController.cs +++ /dev/null @@ -1,85 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Microsoft.AspNetCore.Mvc; -using System.Collections.Generic; -using System.ComponentModel.DataAnnotations; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Content; -using Volo.Abp.Validation; - -namespace LINGYUN.Abp.OssManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("oss-management")] -[Route("api/files/private")] -public class PrivateFilesController : AbpControllerBase, IPrivateFileAppService -{ - private readonly IPrivateFileAppService _service; - - public PrivateFilesController( - IPrivateFileAppService service) - { - _service = service; - - LocalizationResource = typeof(AbpOssManagementResource); - } - - [HttpPost] - public async virtual Task UploadAsync([FromForm] UploadFileInput input) - { - return await _service.UploadAsync(input); - } - - [HttpPost] - [Route("upload")] - public async virtual Task UploadChunkAsync([FromForm] UploadFileChunkInput input) - { - await _service.UploadChunkAsync(input); - } - - [HttpGet] - [Route("search")] - public async virtual Task> GetListAsync(GetFilesInput input) - { - return await _service.GetListAsync(input); - } - - [HttpGet] - [Route("{Name}")] - [Route("{Name}/{Process}")] - [Route("p/{Path}/{Name}")] - [Route("p/{Path}/{Name}/{Process}")] - [Route("t/{TenantId}/{Name}")] - [Route("t/{TenantId}/{Name}/{Process}")] - [Route("t/{TenantId}/p/{Path}/{Name}")] - [Route("t/{TenantId}/p/{Path}/{Name}/{Process}")] - public async virtual Task GetAsync([FromRoute] GetPublicFileInput input) - { - using (CurrentTenant.Change(input.GetTenantId(CurrentTenant))) - { - return await _service.GetAsync(input); - } - } - - [HttpDelete] - public async virtual Task DeleteAsync(GetPublicFileInput input) - { - await _service.DeleteAsync(input); - } - - [HttpGet] - [Route("share")] - public async virtual Task> GetShareListAsync() - { - return await _service.GetShareListAsync(); - } - - [HttpPost] - [Route("share")] - public async virtual Task ShareAsync(FileShareInput input) - { - return await _service.ShareAsync(input); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs deleted file mode 100644 index fe61a59bb..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/PublicFilesController.cs +++ /dev/null @@ -1,70 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.Application.Dtos; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("oss-management")] -[Route("api/files/public")] -public class PublicFilesController : AbpControllerBase, IPublicFileAppService -{ - private readonly IPublicFileAppService _publicFileAppService; - - public PublicFilesController( - IPublicFileAppService publicFileAppService) - { - _publicFileAppService = publicFileAppService; - - LocalizationResource = typeof(AbpOssManagementResource); - } - - - [HttpPost] - public async virtual Task UploadAsync([FromForm] UploadFileInput input) - { - return await _publicFileAppService.UploadAsync(input); - } - - [HttpPost] - [Route("upload")] - public async virtual Task UploadChunkAsync([FromForm] UploadFileChunkInput input) - { - await _publicFileAppService.UploadChunkAsync(input); - } - - [HttpGet] - [Route("search")] - public async virtual Task> GetListAsync(GetFilesInput input) - { - return await _publicFileAppService.GetListAsync(input); - } - - - [HttpGet] - [Route("{Name}")] - [Route("{Name}/{Process}")] - [Route("p/{Path}/{Name}")] - [Route("p/{Path}/{Name}/{Process}")] - [Route("t/{TenantId}/{Name}")] - [Route("t/{TenantId}/{Name}/{Process}")] - [Route("t/{TenantId}/p/{Path}/{Name}")] - [Route("t/{TenantId}/p/{Path}/{Name}/{Process}")] - public async virtual Task GetAsync([FromRoute] GetPublicFileInput input) - { - using (CurrentTenant.Change(input.GetTenantId(CurrentTenant))) - { - return await _publicFileAppService.GetAsync(input); - } - } - - [HttpDelete] - public async virtual Task DeleteAsync(GetPublicFileInput input) - { - await _publicFileAppService.DeleteAsync(input); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/ShareFilesController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/ShareFilesController.cs deleted file mode 100644 index a68ee045c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/ShareFilesController.cs +++ /dev/null @@ -1,32 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -[Area("oss-management")] -[Route("api/files/share")] -[RemoteService(false)] -[ApiExplorerSettings(IgnoreApi = true)] -public class ShareFilesController : AbpControllerBase, IShareFileAppService -{ - private readonly IShareFileAppService _service; - - public ShareFilesController( - IShareFileAppService service) - { - _service = service; - - LocalizationResource = typeof(AbpOssManagementResource); - } - - [HttpGet] - [Route("{url}")] - public virtual Task GetAsync(string url) - { - return _service.GetAsync(url); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs deleted file mode 100644 index 77aa9d2a7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/LINGYUN/Abp/OssManagement/StaticFilesController.cs +++ /dev/null @@ -1,53 +0,0 @@ -using LINGYUN.Abp.OssManagement.Localization; -using LINGYUN.Abp.OssManagement.Permissions; -using Microsoft.AspNetCore.Authorization; -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; -using Volo.Abp.Content; - -namespace LINGYUN.Abp.OssManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("oss-management")] -[Route("api/files/static")] -public class StaticFilesController : AbpControllerBase, IStaticFilesAppService -{ - private readonly IOssObjectAppService _ossObjectAppService; - private readonly IStaticFilesAppService _staticFilesAppServic; - - public StaticFilesController( - IOssObjectAppService ossObjectAppService, - IStaticFilesAppService staticFilesAppServic) - { - _ossObjectAppService = ossObjectAppService; - _staticFilesAppServic = staticFilesAppServic; - - LocalizationResource = typeof(AbpOssManagementResource); - } - - [HttpPost] - [Authorize(AbpOssManagementPermissions.OssObject.Create)] - public async virtual Task UploadAsync([FromForm] CreateOssObjectInput input) - { - return await _ossObjectAppService.CreateAsync(input); - } - - [HttpGet] - [Route("{Bucket}/{Name}")] - [Route("{Bucket}/{Name}/{Process}")] - [Route("{Bucket}/p/{Path}/{Name}")] - [Route("{Bucket}/p/{Path}/{Name}/{Process}")] - [Route("t/{TenantId}/{Bucket}/{Name}")] - [Route("t/{TenantId}/{Bucket}/{Name}/{Process}")] - [Route("t/{TenantId}/{Bucket}/p/{Path}/{Name}")] - [Route("t/{TenantId}/{Bucket}/p/{Path}/{Name}/{Process}")] - public async virtual Task GetAsync([FromRoute] GetStaticFileInput input) - { - using (CurrentTenant.Change(input.GetTenantId(CurrentTenant))) - { - return await _staticFilesAppServic.GetAsync(input); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.EN.md deleted file mode 100644 index 6942626b1..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.EN.md +++ /dev/null @@ -1,44 +0,0 @@ -# LINGYUN.Abp.OssManagement.HttpApi - -Object Storage Management HTTP API Layer - -## Features - -* Provides HTTP API interfaces for object storage management -* Implements RESTful API design -* Supports HTTP interfaces for file upload, download, and sharing -* Provides permission validation and access control - -## API Controllers - -### Container Management -* OssContainerController - * POST /api/oss-management/containers: Create container - * GET /api/oss-management/containers/{name}: Get container information - * GET /api/oss-management/containers: Get container list - * DELETE /api/oss-management/containers/{name}: Delete container - -### Object Management -* OssObjectController - * POST /api/oss-management/objects: Upload object - * GET /api/oss-management/objects/{*path}: Get object - * DELETE /api/oss-management/objects/{*path}: Delete object - -### File Management -* PublicFilesController: Handles public file access -* PrivateFilesController: Handles private file access -* ShareFilesController: Handles shared file access -* StaticFilesController: Handles static file access - -## Features - -* Supports file sharding upload -* Supports breakpoint continuation -* Supports file streaming download -* Supports file access control -* Supports file metadata management - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.md deleted file mode 100644 index ef58a6052..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.HttpApi/README.md +++ /dev/null @@ -1,44 +0,0 @@ -# LINGYUN.Abp.OssManagement.HttpApi - -对象存储管理HTTP API层 - -## 功能 - -* 提供对象存储管理的HTTP API接口 -* 实现RESTful风格的API设计 -* 支持文件上传、下载和共享的HTTP接口 -* 提供权限验证和访问控制 - -## API控制器 - -### 容器管理 -* OssContainerController - * POST /api/oss-management/containers:创建容器 - * GET /api/oss-management/containers/{name}:获取容器信息 - * GET /api/oss-management/containers:获取容器列表 - * DELETE /api/oss-management/containers/{name}:删除容器 - -### 对象管理 -* OssObjectController - * POST /api/oss-management/objects:上传对象 - * GET /api/oss-management/objects/{*path}:获取对象 - * DELETE /api/oss-management/objects/{*path}:删除对象 - -### 文件管理 -* PublicFilesController:处理公共文件访问 -* PrivateFilesController:处理私有文件访问 -* ShareFilesController:处理共享文件访问 -* StaticFilesController:处理静态文件访问 - -## 特性 - -* 支持文件分片上传 -* 支持断点续传 -* 支持文件流式下载 -* 支持文件访问权限控制 -* 支持文件元数据管理 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs deleted file mode 100644 index a0663ab17..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/AbpOssManagementImageSharpModule.cs +++ /dev/null @@ -1,15 +0,0 @@ -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement.ImageSharp; - -[DependsOn(typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementImageSharpModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.AddProcesser(new ImageSharpOssObjectProcesser()); - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs deleted file mode 100644 index dbb3bfc55..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/LINGYUN/Abp/OssManagement/ImageSharp/ImageSharpOssObjectProcesser.cs +++ /dev/null @@ -1,64 +0,0 @@ -using SixLabors.ImageSharp; -using SixLabors.ImageSharp.Processing; -using System; -using System.IO; -using System.Threading.Tasks; - -namespace LINGYUN.Abp.OssManagement.ImageSharp; - -public class ImageSharpOssObjectProcesser : IOssObjectProcesserContributor -{ - public async virtual Task ProcessAsync(OssObjectProcesserContext context) - { - var copyStream = context.OssObject.Content; - var bytes = await copyStream.GetAllBytesAsync(); - - if (bytes.IsImage()) - { - var args = context.Process.Split(','); - if (DrawGraphics(bytes, args, out var content)) - { - context.SetContent(content); - - // 释放原图形流数据 - await copyStream.DisposeAsync(); - } - } - } - - protected virtual bool DrawGraphics(byte[] fileBytes, string[] args, out Stream content) - { - using var image = Image.Load(fileBytes); - - // 大小 - var width = args.GetInt32Prarm("w_"); - var height = args.GetInt32Prarm("h_"); - if (!width.IsNullOrWhiteSpace() && - !height.IsNullOrWhiteSpace()) - { - image.Mutate(x => x.Resize(int.Parse(width), int.Parse(height))); - } - - // 水印 - //var txt = GetString(args, "t_"); - //if (!txt.IsNullOrWhiteSpace()) - //{ - // FontCollection fonts = new FontCollection(); - // FontFamily fontfamily = fonts.Install("本地字体.TTF"); - // var font = new Font(fontfamily, 20, FontStyle.Bold); - // var size = TextMeasurer.Measure(txt, new RendererOptions(font)); - - // image.Mutate(x => x.DrawText(txt, font, Color.WhiteSmoke, - // new PointF(image.Width - size.Width - 3, image.Height - size.Height - 3))); - //} - - // TODO: 其他处理参数及现有的优化 - - var imageStream = new MemoryStream(); - image.Save(imageStream, image.Metadata.DecodedImageFormat); - imageStream.Seek(0, SeekOrigin.Begin); - - content = imageStream; - return true; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.EN.md deleted file mode 100644 index 980106b6c..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.EN.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.ImageSharp - -ImageSharp-based image processing interface for OSS objects - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Features - -* Implements image processing functionality for OSS objects based on ImageSharp -* Supports image format conversion -* Supports image resizing and cropping -* Supports watermark addition -* Supports image quality adjustment -* Supports image metadata processing - -## Image Processing Features - -Supports the following image processing operations: -* resize: Adjust image size -* crop: Crop image -* rotate: Rotate image -* watermark: Add watermark -* format: Convert image format -* quality: Adjust image quality - -## Usage Example - -Image processing parameters are passed through URL query string: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md deleted file mode 100644 index 66837efe7..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.ImageSharp/README.md +++ /dev/null @@ -1,47 +0,0 @@ -# LINGYUN.Abp.OssManagement.ImageSharp - -oss对象ImageSharp图形处理接口 - -## 配置使用 - -模块按需引用 - -```csharp -[DependsOn(typeof(AbpOssManagementFileSystemImageSharpModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 功能 - -* 基于ImageSharp实现OSS对象的图像处理功能 -* 支持图像格式转换 -* 支持图像缩放和裁剪 -* 支持图像水印添加 -* 支持图像质量调整 -* 支持图像元数据处理 - -## 图像处理功能 - -支持以下图像处理操作: -* resize:调整图像大小 -* crop:裁剪图像 -* rotate:旋转图像 -* watermark:添加水印 -* format:转换图像格式 -* quality:调整图像质量 - -## 使用示例 - -图像处理参数通过URL查询字符串传递: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs deleted file mode 100644 index 3cffa6d34..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpImagingProcesserContributor.cs +++ /dev/null @@ -1,79 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using System; -using System.IO; -using System.Linq; -using System.Threading.Tasks; -using Volo.Abp.Http; -using Volo.Abp.Imaging; - -namespace LINGYUN.Abp.OssManagement.Imaging; -public class AbpImagingProcesserContributor : IOssObjectProcesserContributor -{ - public async virtual Task ProcessAsync(OssObjectProcesserContext context) - { - Stream processSreeam = new MemoryStream(); - var copyStream = context.OssObject.Content; - await copyStream.CopyToAsync(processSreeam); - copyStream.Seek(0, SeekOrigin.Begin); - var bytes = await processSreeam.GetAllBytesAsync(); - - if (bytes.IsImage()) - { - var args = context.Process.Split(','); - var mimeType = MimeTypes.GetByExtension(Path.GetExtension(context.OssObject.Name)); - - if (Resize(args, out var resizeArgs)) - { - processSreeam.Seek(0, SeekOrigin.Begin); - var imageResizer = context.ServiceProvider.GetRequiredService(); - var resizeResult = await imageResizer.ResizeAsync(processSreeam, resizeArgs, mimeType); - if (resizeResult.State == ImageProcessState.Done) - { - processSreeam = resizeResult.Result; - } - } - if (Compress(args)) - { - processSreeam.Seek(0, SeekOrigin.Begin); - var imageCompressor = context.ServiceProvider.GetRequiredService(); - var compressResult = await imageCompressor.CompressAsync(processSreeam, mimeType); - if (compressResult.State == ImageProcessState.Done) - { - processSreeam = compressResult.Result; - } - } - if (processSreeam.Length != copyStream.Length) - { - context.SetContent(processSreeam); - // 释放原图形流数据 - await copyStream.DisposeAsync(); - } - else - { - await processSreeam.DisposeAsync(); - } - } - } - - protected virtual bool Resize(string[] args, out ImageResizeArgs resizeArgs) - { - // 大小 - var width = args.GetInt32Prarm("w_"); - var height = args.GetInt32Prarm("h_"); - if (!width.IsNullOrWhiteSpace() && - !height.IsNullOrWhiteSpace()) - { - resizeArgs = new ImageResizeArgs( - uint.Parse(width), - uint.Parse(height)); - return true; - } - resizeArgs = null; - return false; - } - - protected virtual bool Compress(string[] args) - { - return args.Contains("cm"); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs deleted file mode 100644 index dbd09dcdc..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/LINGYUN/Abp/OssManagement/Imaging/AbpOssManagementImagingModule.cs +++ /dev/null @@ -1,18 +0,0 @@ -using Volo.Abp.Imaging; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement.Imaging; - -[DependsOn( - typeof(AbpImagingAbstractionsModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementImagingModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - Configure(options => - { - options.AddProcesser(new AbpImagingProcesserContributor()); - }); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.EN.md deleted file mode 100644 index 4e59eceea..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.EN.md +++ /dev/null @@ -1,51 +0,0 @@ -# LINGYUN.Abp.OssManagement.Imaging - -Object Storage Management Image Processing Module - -## Features - -* Provides basic image processing functionality for object storage -* Supports image format conversion -* Supports image resizing and cropping -* Supports watermark addition -* Supports image quality adjustment -* Supports image metadata processing - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementImagingModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Image Processing Features - -Supports the following image processing operations: -* resize: Adjust image size -* crop: Crop image -* rotate: Rotate image -* watermark: Add watermark -* format: Convert image format -* quality: Adjust image quality - -## Usage Example - -Image processing parameters are passed through URL query string: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## Related Modules - -* LINGYUN.Abp.OssManagement.ImageSharp: Provides ImageSharp-based implementation - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.md deleted file mode 100644 index a8543a13e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Imaging/README.md +++ /dev/null @@ -1,51 +0,0 @@ -# LINGYUN.Abp.OssManagement.Imaging - -对象存储管理图像处理模块 - -## 功能 - -* 提供对象存储的图像处理基础功能 -* 支持图像格式转换 -* 支持图像缩放和裁剪 -* 支持图像水印添加 -* 支持图像质量调整 -* 支持图像元数据处理 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementImagingModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 图像处理功能 - -支持以下图像处理操作: -* resize:调整图像大小 -* crop:裁剪图像 -* rotate:旋转图像 -* watermark:添加水印 -* format:转换图像格式 -* quality:调整图像质量 - -## 使用示例 - -图像处理参数通过URL查询字符串传递: - -``` -http://your-domain/api/oss-management/objects/my-image.jpg?process=image/resize,w_100,h_100/watermark,text_Hello -``` - -## 相关模块 - -* LINGYUN.Abp.OssManagement.ImageSharp:提供基于ImageSharp的具体实现 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs deleted file mode 100644 index 470f29b33..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainer.cs +++ /dev/null @@ -1,564 +0,0 @@ -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using Minio; -using Minio.DataModel.Args; -using Minio.DataModel.ILM; -using Minio.Exceptions; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Linq.Dynamic.Core; -using System.Net.Http; -using System.Reactive.Linq; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.Minio; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Timing; - -namespace LINGYUN.Abp.OssManagement.Minio; - -/// -/// Oss容器的Minio实现 -/// -public class MinioOssContainer : OssContainerBase, IOssObjectExpireor -{ - protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } - protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - protected IHttpClientFactory HttpClientFactory { get; } - - protected IClock Clock { get; } - protected ICurrentTenant CurrentTenant { get; } - protected ILogger Logger { get; } - - public MinioOssContainer( - IClock clock, - ICurrentTenant currentTenant, - ILogger logger, - IMinioBlobNameCalculator minioBlobNameCalculator, - IBlobNormalizeNamingService blobNormalizeNamingService, - IBlobContainerConfigurationProvider configurationProvider, - IServiceScopeFactory serviceScopeFactory, - IHttpClientFactory httpClientFactory, - IOptions options) - : base(options, serviceScopeFactory) - { - Clock = clock; - Logger = logger; - CurrentTenant = currentTenant; - HttpClientFactory = httpClientFactory; - MinioBlobNameCalculator = minioBlobNameCalculator; - BlobNormalizeNamingService = blobNormalizeNamingService; - ConfigurationProvider = configurationProvider; - } - - public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - - var prefixPath = GetPrefixPath(); - var path = GetBlobPath(prefixPath, request.Path); - - var args = new RemoveObjectsArgs() - .WithBucket(bucket) - .WithObjects(request.Objects.Select((x) => path + x.RemovePreFix("/")).ToList()); - - var errors = await client.RemoveObjectsAsync(args); - - foreach (var error in errors) - { - Logger.LogWarning("Batch deletion of objects failed, error details {code}: {message}", error.Code, error.Message); - } - } - - public async override Task CreateAsync(string name) - { - var client = GetMinioClient(); - - var bucket = GetBucket(name); - - if (await BucketExists(client, bucket)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerAlreadyExists); - } - - await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucket)); - - return new OssContainer( - name, - Clock.Now, - 0L, - Clock.Now, - new Dictionary()); - } - - public async override Task ObjectExistsAsync(GetOssObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - var prefixPath = GetPrefixPath(); - var objectPath = GetBlobPath(prefixPath, request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - return await ObjectExists(client, bucket, objectName); - } - - public async override Task CreateObjectAsync(CreateOssObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - var prefixPath = GetPrefixPath(); - var objectPath = GetBlobPath(prefixPath, request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - var isDir = false; - - if (!request.Overwrite && await ObjectExists(client, bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - } - - // 没有bucket则创建 - if (!await BucketExists(client, bucket)) - { - var configuration = GetMinioConfiguration(); - if (!configuration.CreateBucketIfNotExists) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - await client.MakeBucketAsync(new MakeBucketArgs().WithBucket(bucket)); - } - if (request.Content.IsNullOrEmpty()) - { - isDir = true; - var emptyContent = "This is an OSS object that simulates a directory.".GetBytes(); - request.SetContent(new MemoryStream(emptyContent)); - } - var putResponse = await client.PutObjectAsync(new PutObjectArgs() - .WithBucket(bucket) - .WithObject(isDir ? $"{objectName}/_dir" : objectName) - .WithStreamData(request.Content) - .WithObjectSize(request.Content.Length)); - - if (request.ExpirationTime.HasValue) - { - var lifecycleRule = new LifecycleRule - { - Status = LifecycleRule.LifecycleRuleStatusEnabled, - ID = putResponse.Etag, - Expiration = new Expiration(Clock.Now.Add(request.ExpirationTime.Value)) - }; - var lifecycleConfiguration = new LifecycleConfiguration([lifecycleRule]); - - var lifecycleArgs = new SetBucketLifecycleArgs() - .WithBucket(bucket) - .WithLifecycleConfiguration(lifecycleConfiguration); - - await client.SetBucketLifecycleAsync(lifecycleArgs); - } - - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? objectName.Replace(objectPath, "") - : objectName, - objectPath.Replace(prefixPath, ""), - putResponse.Etag, - Clock.Now, - putResponse.Size, - Clock.Now, - new Dictionary(), - objectName.EndsWith('/')) - { - FullName = objectName.Replace(prefixPath, "") - }; - - if (!Equals(request.Content, Stream.Null)) - { - request.Content.Seek(0, SeekOrigin.Begin); - ossObject.SetContent(request.Content); - } - - return ossObject; - } - - public async override Task DeleteObjectAsync(GetOssObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - - var prefixPath = GetPrefixPath(); - var objectPath = GetBlobPath(prefixPath, request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (objectName.EndsWith('/') && await BucketExists(client, bucket)) - { - var objectNames = new List(); - var objects = client.ListObjectsEnumAsync( - new ListObjectsArgs() - .WithBucket(bucket) - .WithPrefix(objectName) - .WithRecursive(true)); - - await foreach (var @object in objects) - { - objectNames.Add(@object.Key); - } - - var errors = await client.RemoveObjectsAsync( - new RemoveObjectsArgs() - .WithBucket(bucket) - .WithObjects(objectNames)); - - foreach (var error in errors) - { - Logger.LogWarning("Batch deletion of objects failed, error details {code}: {message}", error.Code, error.Message); - } - - return; - } - - if (await ObjectExists(client, bucket, objectName)) - { - var removeObjectArgs = new RemoveObjectArgs() - .WithBucket(bucket) - .WithObject(objectName); - - await client.RemoveObjectAsync(removeObjectArgs); - } - } - - public async override Task ExistsAsync(string name) - { - var client = GetMinioClient(); - - var bucket = GetBucket(name); - - return await BucketExists(client, bucket); - } - - public async virtual Task ExpireAsync(ExprieOssObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - - var bucketListResult = await client.ListBucketsAsync(); - var expiredBuckets = bucketListResult.Buckets.Take(request.Batch); - - foreach (var expiredBucket in expiredBuckets) - { - var listObjectArgs = new ListObjectsArgs() - .WithBucket(expiredBucket.Name); - - var expiredObjects = client.ListObjectsEnumAsync(listObjectArgs); - - await foreach (var item in expiredObjects) - { - var lifecycleConfiguration = new LifecycleConfiguration(new List - { - new LifecycleRule - { - ID = item.Key, - Status = LifecycleRule.LifecycleRuleStatusEnabled, - Expiration = new Expiration(Clock.Normalize(request.ExpirationTime.DateTime)) - } - }); - - var lifecycleArgs = new SetBucketLifecycleArgs() - .WithBucket(bucket) - .WithLifecycleConfiguration(lifecycleConfiguration); - - await client.SetBucketLifecycleAsync(lifecycleArgs); - } - } - } - - public async override Task GetAsync(string name) - { - var client = GetMinioClient(); - - var bucket = GetBucket(name); - - var bucketListResult = await client.ListBucketsAsync(); - - var bucketInfo = bucketListResult.Buckets.FirstOrDefault((x) => x.Name == bucket); - if (bucketInfo == null) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - - return new OssContainer( - bucketInfo.Name, - bucketInfo.CreationDateDateTime, - 0L, - bucketInfo.CreationDateDateTime, - new Dictionary()); - } - - public async override Task GetListAsync(GetOssContainersRequest request) - { - var client = GetMinioClient(); - - var bucketListResult = await client.ListBucketsAsync(); - - var totalCount = bucketListResult.Buckets.Count; - - var resultObjects = bucketListResult.Buckets - .AsQueryable() - .OrderBy(x => x.Name) - .PageBy(request.Current, request.MaxKeys ?? 10) - .Select(x => new OssContainer( - x.Name, - x.CreationDateDateTime, - 0L, - null, - new Dictionary())) - .ToList(); - - return new GetOssContainersResponse( - request.Prefix, - request.Marker, - null, - totalCount, - resultObjects); - } - - public async override Task GetObjectsAsync(GetOssObjectsRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.BucketName); - - var prefixPath = GetPrefixPath(); - var objectPath = GetBlobPath(prefixPath, request.Prefix); - var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace() - ? request.Marker.Replace(objectPath, "") - : request.Marker; - - var listObjectArgs = new ListObjectsArgs() - .WithBucket(bucket) - .WithPrefix(objectPath); - - var resultObjects = new List(); - - var listObjectResult = client.ListObjectsEnumAsync(listObjectArgs); - - await foreach (var item in listObjectResult) - { - // 作为目录占位,无需显示 - if (item.Key.EndsWith("_dir")) - { - continue; - } - resultObjects.Add(new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? item.Key.Replace(objectPath, "") - : item.Key, - request.Prefix, - item.ETag, - item.LastModifiedDateTime, - item.Size.To(), - item.LastModifiedDateTime, - new Dictionary(), - item.IsDir)); - } - - var totalCount = resultObjects.Count; - resultObjects = resultObjects - .AsQueryable() - .OrderBy(x => x.Name) - .PageBy(request.Current, request.MaxKeys ?? 10) - .ToList(); - - return new GetOssObjectsResponse( - bucket, - request.Prefix, - request.Marker, - marker, - "/", - totalCount, - resultObjects); - } - - protected async override Task DeleteBucketAsync(string name) - { - var client = GetMinioClient(); - var bucket = GetBucket(name); - - if (!await BucketExists(client, bucket)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - - // 非空目录无法删除 - var listObjects = new List(); - - var listObjectObs = client.ListObjectsEnumAsync( - new ListObjectsArgs() - .WithBucket(bucket)); - await foreach (var item in listObjectObs) - { - listObjects.Add(item.Key); - } - - if (listObjects.Count > 0) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerDeleteWithNotEmpty); - } - - var deleteBucketArgs = new RemoveBucketArgs() - .WithBucket(bucket); - - await client.RemoveBucketAsync(deleteBucketArgs); - } - - protected async override Task GetOssObjectAsync(GetOssObjectRequest request) - { - var client = GetMinioClient(); - - var bucket = GetBucket(request.Bucket); - - var prefixPath = GetPrefixPath(); - var objectPath = GetBlobPath(prefixPath, request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (!await ObjectExists(client, bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - } - - var getObjectResult = await client.StatObjectAsync( - new StatObjectArgs() - .WithBucket(bucket) - .WithObject(objectName)); - - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? getObjectResult.ObjectName.Replace(objectPath, "") - : getObjectResult.ObjectName, - request.Path, - getObjectResult.ETag, - getObjectResult.LastModified, - getObjectResult.Size, - getObjectResult.LastModified, - getObjectResult.MetaData, - getObjectResult.ObjectName.EndsWith("/")) - { - FullName = getObjectResult.ObjectName.Replace(prefixPath, "") - }; - - if (getObjectResult.Size > 0) - { - var objectUrl = await client.PresignedGetObjectAsync( - new PresignedGetObjectArgs() - .WithBucket(bucket) - .WithObject(objectName) - .WithExpiry(3600)); - var httpClient = HttpClientFactory.CreateMinioHttpClient(); - - ossObject.SetContent(await httpClient.GetStreamAsync(objectUrl)); - } - - return ossObject; - } - - protected virtual IMinioClient GetMinioClient() - { - var configuration = GetMinioConfiguration(); - - var client = new MinioClient() - .WithEndpoint(configuration.EndPoint) - .WithCredentials(configuration.AccessKey, configuration.SecretKey); - - if (configuration.WithSSL) - { - client.WithSSL(); - } - - return client.Build(); - } - - protected async virtual Task BucketExists(IMinioClient client, string bucket) - { - var args = new BucketExistsArgs().WithBucket(bucket); - - return await client.BucketExistsAsync(args); - } - - protected async virtual Task ObjectExists(IMinioClient client, string bucket, string @object) - { - if (await client.BucketExistsAsync(new BucketExistsArgs().WithBucket(bucket))) - { - try - { - await client.StatObjectAsync(new StatObjectArgs().WithBucket(bucket).WithObject(@object)); - } - catch (Exception e) - { - if (e is ObjectNotFoundException) - { - return false; - } - - throw; - } - - return true; - } - - return false; - } - - protected virtual MinioBlobProviderConfiguration GetMinioConfiguration() - { - var configuration = ConfigurationProvider.Get(); - - return configuration.GetMinioConfiguration(); - } - - protected virtual string GetBucket(string bucket) - { - var configuration = ConfigurationProvider.Get(); - var minioConfiguration = configuration.GetMinioConfiguration(); - var blobPath = minioConfiguration.BucketName; - if (string.Equals(bucket, blobPath, StringComparison.InvariantCultureIgnoreCase)) - { - return bucket; - } - - return bucket; - } - - protected virtual string GetPrefixPath() - { - return CurrentTenant.Id == null - ? $"host/" - : $"tenants/{CurrentTenant.Id.Value.ToString("D")}/"; - } - - protected virtual string GetBlobPath(string basePath, string path) - { - var resultPath = $"{basePath}{( - path.IsNullOrWhiteSpace() ? "" : - path.Replace("./", "").RemovePreFix("/"))}"; - - return resultPath.Replace("//", "").EnsureEndsWith('/'); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs deleted file mode 100644 index adab172c5..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/LINGYUN/Abp/OssManagement/Minio/MinioOssContainerFactory.cs +++ /dev/null @@ -1,59 +0,0 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using System.Net.Http; -using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.Minio; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Timing; - -namespace LINGYUN.Abp.OssManagement.Minio; -public class MinioOssContainerFactory : IOssContainerFactory -{ - protected IMinioBlobNameCalculator MinioBlobNameCalculator { get; } - protected IBlobNormalizeNamingService BlobNormalizeNamingService { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - - protected IClock Clock { get; } - protected ICurrentTenant CurrentTenant { get; } - protected ILogger Logger { get; } - protected IHttpClientFactory HttpClientFactory { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - protected IOptions Options { get; } - - public MinioOssContainerFactory( - IClock clock, - ICurrentTenant currentTenant, - ILogger logger, - IHttpClientFactory httpClientFactory, - IMinioBlobNameCalculator minioBlobNameCalculator, - IBlobNormalizeNamingService blobNormalizeNamingService, - IBlobContainerConfigurationProvider configurationProvider, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - { - Clock = clock; - Logger = logger; - CurrentTenant = currentTenant; - Options = options; - HttpClientFactory = httpClientFactory; - ServiceScopeFactory = serviceScopeFactory; - MinioBlobNameCalculator = minioBlobNameCalculator; - BlobNormalizeNamingService = blobNormalizeNamingService; - ConfigurationProvider = configurationProvider; - } - - public IOssContainer Create() - { - return new MinioOssContainer( - Clock, - CurrentTenant, - Logger, - MinioBlobNameCalculator, - BlobNormalizeNamingService, - ConfigurationProvider, - ServiceScopeFactory, - HttpClientFactory, - Options); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioOssContainerServiceCollectionExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioOssContainerServiceCollectionExtensions.cs deleted file mode 100644 index 053efa995..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/Microsoft/Extensions/DependencyInjection/MinioOssContainerServiceCollectionExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Minio; -using System; - -namespace Microsoft.Extensions.DependencyInjection; - -public static class MinioOssContainerServiceCollectionExtensions -{ - public static IServiceCollection AddMinioContainer(this IServiceCollection services) - { - services.AddTransient(); - - services.AddTransient(provider => - provider - .GetRequiredService() - .Create() - .As()); - - return services; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.EN.md deleted file mode 100644 index 3fde7e614..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.EN.md +++ /dev/null @@ -1,40 +0,0 @@ -# LINGYUN.Abp.OssManagement.Minio - -MinIO implementation for OSS container management interface - -## Features - -* Implements object storage management based on MinIO -* Supports basic operations including file upload, download, and deletion -* Supports file sharding upload and breakpoint continuation -* Integrates with MinIO access control and security mechanisms -* Supports custom bucket policies - -## Configuration - -Module reference as needed - -Please refer to [BlobStoring Minio](https://abp.io/docs/latest/framework/infrastructure/blob-storing/minio) for related configuration items. - -```csharp -[DependsOn(typeof(AbpOssManagementMinioModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Configuration Details - -Required configuration items: -* EndPoint: MinIO server address -* AccessKey: Access key -* SecretKey: Secret key -* BucketName: Bucket name -* WithSSL: Whether to enable SSL connection -* CreateBucketIfNotExists: Whether to create bucket if it doesn't exist - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.md deleted file mode 100644 index 68249fa60..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Minio/README.md +++ /dev/null @@ -1,40 +0,0 @@ -# LINGYUN.Abp.OssManagement.Minio - -Oss容器管理接口的Minio实现 - -## 功能 - -* 实现基于MinIO的对象存储管理 -* 支持文件上传、下载、删除等基本操作 -* 支持文件分片上传和断点续传 -* 集成MinIO的访问控制和安全机制 -* 支持自定义存储桶策略 - -## 配置使用 - -模块按需引用 - -相关配置项请参考 [BlobStoring Minio](https://abp.io/docs/latest/framework/infrastructure/blob-storing/minio) - -```csharp -[DependsOn(typeof(AbpOssManagementMinioModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 配置说明 - -需要配置以下关键信息: -* EndPoint:MinIO服务器地址 -* AccessKey:访问密钥 -* SecretKey:密钥密码 -* BucketName:存储桶名称 -* WithSSL:是否启用SSL连接 -* CreateBucketIfNotExists:不存在时是否创建存储桶 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN.Abp.OssManagement.Nexus.csproj b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN.Abp.OssManagement.Nexus.csproj deleted file mode 100644 index a76c22dbe..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN.Abp.OssManagement.Nexus.csproj +++ /dev/null @@ -1,21 +0,0 @@ - - - - - - - net10.0 - LINGYUN.Abp.OssManagement.Nexus - LINGYUN.Abp.OssManagement.Nexus - false - false - false - - - - - - - - - diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/AbpOssManagementNexusModule.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/AbpOssManagementNexusModule.cs deleted file mode 100644 index b521a366b..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/AbpOssManagementNexusModule.cs +++ /dev/null @@ -1,38 +0,0 @@ -using LINGYUN.Abp.BlobStoring.Nexus; -using Microsoft.Extensions.Configuration; -using Microsoft.Extensions.DependencyInjection; -using System; -using Volo.Abp.BlobStoring; -using Volo.Abp.Modularity; - -namespace LINGYUN.Abp.OssManagement.Nexus; - -[DependsOn( - typeof(AbpBlobStoringNexusModule), - typeof(AbpOssManagementDomainModule))] -public class AbpOssManagementNexusModule : AbpModule -{ - public override void ConfigureServices(ServiceConfigurationContext context) - { - var configuration = context.Services.GetConfiguration(); - var ossConfiguration = configuration.GetSection("OssManagement"); - var ossProvider = ossConfiguration["Provider"]; - - if (!ossProvider.IsNullOrWhiteSpace() && - "Nexus".Equals(ossProvider, StringComparison.InvariantCultureIgnoreCase)) - { - Configure(options => - { - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - containerConfiguration.UseNexus(oss => - { - ossConfiguration.GetSection("Nexus").Bind(oss); - }); - }); - }); - - context.Services.AddNexusContainer(); - } - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs deleted file mode 100644 index 8e2b328c0..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainer.cs +++ /dev/null @@ -1,362 +0,0 @@ -using LINGYUN.Abp.BlobStoring.Nexus; -using LINGYUN.Abp.Sonatype.Nexus.Assets; -using LINGYUN.Abp.Sonatype.Nexus.Components; -using LINGYUN.Abp.Sonatype.Nexus.Search; -using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI; -using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Assets; -using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI.Browsers; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Text; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.BlobStoring; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.Nexus; - -internal class NexusOssContainer : OssContainerBase, IOssObjectExpireor -{ - protected ICoreUiServiceProxy CoreUiServiceProxy { get; } - protected INexusAssetManager NexusAssetManager { get; } - protected INexusComponentManager NexusComponentManager { get; } - protected INexusLookupService NexusLookupService { get; } - protected ICurrentTenant CurrentTenant { get; } - protected IBlobRawPathCalculator BlobRawPathCalculator { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - - public NexusOssContainer( - ICoreUiServiceProxy coreUiServiceProxy, - INexusAssetManager nexusAssetManager, - INexusComponentManager nexusComponentManager, - INexusLookupService nexusLookupService, - ICurrentTenant currentTenant, - IBlobRawPathCalculator blobRawPathCalculator, - IBlobContainerConfigurationProvider configurationProvider, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - : base(options, serviceScopeFactory) - { - CoreUiServiceProxy = coreUiServiceProxy; - NexusAssetManager = nexusAssetManager; - NexusComponentManager = nexusComponentManager; - NexusLookupService = nexusLookupService; - CurrentTenant = currentTenant; - BlobRawPathCalculator = blobRawPathCalculator; - ConfigurationProvider = configurationProvider; - } - - public override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) - { - throw new NotImplementedException(); - } - - public async override Task CreateAsync(string name) - { - // 创建容器的逻辑就是创建一个包含一个空白assets的component - - var blobPath = BlobRawPathCalculator.CalculateGroup(name, "readme"); - - var nexusConfiguration = GetNexusConfiguration(); - - var uploadArgs = new NexusRawBlobUploadArgs( - nexusConfiguration.Repository, - blobPath, - new Asset("readme", Encoding.UTF8.GetBytes("A placeholder for an empty container."))); - - await NexusComponentManager.UploadAsync(uploadArgs); - - return new OssContainer( - name, - DateTime.Now, - 0L, - DateTime.Now); - } - - public async override Task ObjectExistsAsync(GetOssObjectRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); - - var searchBlobName = GetObjectName(request.Bucket, request.Path, request.Object); - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - searchBlobName); - - var nexusAssetListResult = await NexusLookupService.ListAssetAsync(nexusSearchArgs); - - return nexusAssetListResult.Items.Count != 0; - } - - public async override Task CreateObjectAsync(CreateOssObjectRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); - if (!request.Overwrite) - { - var searchBlobName = GetObjectName(request.Bucket, request.Path, request.Object); - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - searchBlobName); - - var nexusAssetListResult = await NexusLookupService.ListAssetAsync(nexusSearchArgs); - if (nexusAssetListResult.Items.Any()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - } - } - - var blobName = GetObjectName(request.Bucket, request.Path, request.Object, true); - var blobBytes = await request.Content.GetAllBytesAsync(); - var uploadArgs = new NexusRawBlobUploadArgs( - nexusConfiguration.Repository, - blobPath, - new Asset(blobName, blobBytes)); - - await NexusComponentManager.UploadAsync(uploadArgs); - - var getOssObjectRequest = new GetOssObjectRequest( - request.Bucket, request.Object, request.Path); - - return await GetObjectAsync(getOssObjectRequest); - } - - public async override Task DeleteObjectAsync(GetOssObjectRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); - var blobName = GetObjectName(request.Bucket, request.Path, request.Object); - - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - blobName); - - var nexusAssetListResult = await NexusLookupService.ListAssetAsync(nexusSearchArgs); - var nexusAsset = nexusAssetListResult.Items.FirstOrDefault(); - if (nexusAsset != null) - { - await NexusAssetManager.DeleteAsync(nexusAsset.Id); - } - } - - public override Task ExistsAsync(string name) - { - throw new NotImplementedException(); - } - - public virtual Task ExpireAsync(ExprieOssObjectRequest request) - { - throw new NotImplementedException(); - } - - public async override Task GetAsync(string name) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/"); - - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - "/"); - - var nexusComponentListResult = await NexusLookupService.ListComponentAsync(nexusSearchArgs); - var nexusComponent = nexusComponentListResult.Items.FirstOrDefault(); - if (nexusComponent == null) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - - var lastModified = nexusComponent.Assets - .OrderBy(asset => asset.LastModified) - .Select(asset => asset.LastModified) - .FirstOrDefault(); - - return new OssContainer( - nexusComponent.Name, - lastModified ?? new DateTime(), - 0L, - lastModified); - } - - public async override Task GetListAsync(GetOssContainersRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = request.Prefix.RemovePreFix(".").RemovePreFix("/"); - var readComponent = CoreUIBrowse.Read(nexusConfiguration.Repository, blobPath); - - var coreUIResponse = await CoreUiServiceProxy.SearchAsync(readComponent); - var ifFolderComponents = coreUIResponse.Result.Data.Where(component => component.Type == "folder").ToArray(); - - return new GetOssContainersResponse( - request.Prefix, - request.Marker, - "", - ifFolderComponents.Length, - ifFolderComponents.Select(component => - new OssContainer( - component.Text, - new DateTime(), - 0L, - null, - new Dictionary())) - .ToList()); - } - - public async override Task GetObjectsAsync(GetOssObjectsRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = GetBasePath(request.BucketName, request.Prefix, ""); - var readComponent = CoreUIBrowse.Read(nexusConfiguration.Repository, blobPath.RemovePreFix("/")); - - var coreUIResponse = await CoreUiServiceProxy.SearchAsync(readComponent); - var filterComponents = coreUIResponse.Result.Data - .WhereIf(string.Equals(request.Delimiter, "/"), component => component.Type == "folder") - .OrderBy(component => component.Text) - .AsQueryable() - .PageBy(request.Current, request.MaxKeys ?? 10) - .ToArray(); - - var response = new GetOssObjectsResponse( - request.BucketName, - request.Prefix, - request.Marker, - "", - "/", // 文件系统目录分隔符 - coreUIResponse.Result.Data.Count, - filterComponents.Select(component => new OssObject( - component.Text, - request.Prefix, - "", - null, - 0L, - null, - new Dictionary(), - component.Type == "folder") - { - FullName = component.Id - }) - .ToList()); - - return response; - } - - protected async override Task DeleteBucketAsync(string name) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = BlobRawPathCalculator.CalculateGroup(name, "/"); - - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - "/"); - - var nexusComponentListResult = await NexusLookupService.ListComponentAsync(nexusSearchArgs); - var nexusComponent = nexusComponentListResult.Items.FirstOrDefault(); - if (nexusComponent == null) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - - await NexusComponentManager.DeleteAsync(nexusComponent.Id); - } - - protected async override Task GetOssObjectAsync(GetOssObjectRequest request) - { - var nexusConfiguration = GetNexusConfiguration(); - var blobPath = GetBasePath(request.Bucket, request.Path, request.Object); - var blobFullName = GetObjectName(request.Bucket, request.Path, request.Object); - var blobName = GetObjectName(request.Bucket, request.Path, request.Object, true); - - var nexusSearchArgs = new NexusSearchArgs( - nexusConfiguration.Repository, - blobPath, - blobFullName); - - var nexusAssetListResult = await NexusLookupService.ListAssetAsync(nexusSearchArgs); - var nexusAssetItem = nexusAssetListResult.Items.FirstOrDefault(); - if (nexusAssetItem == null) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - } - - var (Repository, ComponentId) = DecodeBase64Id(nexusAssetItem.Id); - - var readAsset = CoreUIAsset.Read(ComponentId, Repository); - - var coreUIResponse = await CoreUiServiceProxy.SearchAsync(readAsset); - var checksum = coreUIResponse.Result.Data.Attributes.GetOrDefault("checksum"); - var metadata = new Dictionary(); - if (checksum != null) - { - foreach (var data in checksum) - { - metadata.Add(data.Key, data.Value.ToString()); - } - } - - var ossObject = new OssObject( - blobName, - blobPath, - checksum?.GetOrDefault("md5")?.ToString(), - coreUIResponse.Result.Data.BlobCreated, - coreUIResponse.Result.Data.Size, - coreUIResponse.Result.Data.BlobUpdated, - metadata - ); - - var ossContent = await NexusAssetManager.GetContentOrNullAsync(nexusAssetItem); - - ossObject.SetContent(ossContent); - - return ossObject; - } - - protected virtual NexusBlobProviderConfiguration GetNexusConfiguration() - { - var configuration = ConfigurationProvider.Get(); - var nexusConfiguration = configuration.GetNexusConfiguration(); - return nexusConfiguration; - } - - protected virtual string GetBasePath(string bucket, string path, string @object) - { - var objectPath = bucket.EnsureEndsWith('/') + (!path.IsNullOrWhiteSpace() ? path.RemovePreFix("/") : ""); - objectPath = BlobRawPathCalculator.CalculateGroup(objectPath, @object); - return objectPath; - } - - protected virtual string GetObjectName(string bucket, string path, string @object, bool replaceObjectPath = false) - { - var objectPath = bucket.EnsureEndsWith('/') + (!path.IsNullOrWhiteSpace() ? path.RemovePreFix("/") : ""); - //objectPath = BlobRawPathCalculator.CalculateGroup(objectPath, @object); - var objectName = BlobRawPathCalculator.CalculateName(objectPath, @object, replaceObjectPath); - return objectName; - } - - protected virtual (string Repository, string ComponentId) DecodeBase64Id(string base64id) - { - base64id = base64id.Replace("-", "+").Replace("_", "/"); - var base64 = Encoding.ASCII.GetBytes(base64id); - var padding = base64.Length * 3 % 4;//(base64.Length*6 % 8)/2 - if (padding != 0) - { - base64id = base64id.PadRight(base64id.Length + padding, '='); - } - - var buffer = Convert.FromBase64String(base64id); - var decoded = Encoding.UTF8.GetString(buffer); - var parts = decoded.Split(":"); - if (parts.Length != 2) - { - throw new AbpException("Unable to parse component id " + decoded); - } - return (parts[0], parts[1]); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs deleted file mode 100644 index 827d886d8..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/LINGYUN/Abp/OssManagement/Nexus/NexusOssContainerFactory.cs +++ /dev/null @@ -1,60 +0,0 @@ -using LINGYUN.Abp.BlobStoring.Nexus; -using LINGYUN.Abp.Sonatype.Nexus.Assets; -using LINGYUN.Abp.Sonatype.Nexus.Components; -using LINGYUN.Abp.Sonatype.Nexus.Search; -using LINGYUN.Abp.Sonatype.Nexus.Services.CoreUI; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using Volo.Abp.BlobStoring; -using Volo.Abp.MultiTenancy; - -namespace LINGYUN.Abp.OssManagement.Nexus; -internal class NexusOssContainerFactory : IOssContainerFactory -{ - protected ICoreUiServiceProxy CoreUiServiceProxy { get; } - protected INexusAssetManager NexusAssetManager { get; } - protected INexusComponentManager NexusComponentManager { get; } - protected INexusLookupService NexusLookupService { get; } - protected ICurrentTenant CurrentTenant { get; } - protected IBlobRawPathCalculator BlobRawPathCalculator { get; } - protected IBlobContainerConfigurationProvider ConfigurationProvider { get; } - - protected IServiceScopeFactory ServiceScopeFactory { get; } - protected IOptions Options { get; } - - public NexusOssContainerFactory( - ICoreUiServiceProxy coreUiServiceProxy, - INexusAssetManager nexusAssetManager, - INexusComponentManager nexusComponentManager, - INexusLookupService nexusLookupService, - ICurrentTenant currentTenant, - IBlobRawPathCalculator blobRawPathCalculator, - IBlobContainerConfigurationProvider configurationProvider, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - { - CoreUiServiceProxy = coreUiServiceProxy; - NexusAssetManager = nexusAssetManager; - NexusComponentManager = nexusComponentManager; - NexusLookupService = nexusLookupService; - CurrentTenant = currentTenant; - BlobRawPathCalculator = blobRawPathCalculator; - ConfigurationProvider = configurationProvider; - Options = options; - ServiceScopeFactory = serviceScopeFactory; - } - - public IOssContainer Create() - { - return new NexusOssContainer( - CoreUiServiceProxy, - NexusAssetManager, - NexusComponentManager, - NexusLookupService, - CurrentTenant, - BlobRawPathCalculator, - ConfigurationProvider, - ServiceScopeFactory, - Options); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/Microsoft/Extensions/DependencyInjection/NexusOssContainerServiceCollectionExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/Microsoft/Extensions/DependencyInjection/NexusOssContainerServiceCollectionExtensions.cs deleted file mode 100644 index aabe45a85..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/Microsoft/Extensions/DependencyInjection/NexusOssContainerServiceCollectionExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Nexus; -using System; - -namespace Microsoft.Extensions.DependencyInjection; - -public static class NexusOssContainerServiceCollectionExtensions -{ - public static IServiceCollection AddNexusContainer(this IServiceCollection services) - { - services.AddTransient(); - - services.AddTransient(provider => - provider - .GetRequiredService() - .Create() - .As()); - - return services; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.EN.md deleted file mode 100644 index 9f6614083..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.EN.md +++ /dev/null @@ -1,43 +0,0 @@ -# LINGYUN.Abp.OssManagement.Nexus - -OSS Management implementation for Nexus Repository - -## Features - -* Implements object storage management based on Nexus Raw repository -* Supports basic operations including file upload, download, and deletion -* Supports file sharding upload and breakpoint continuation -* Integrates with Nexus access control and security mechanisms -* Supports object expiration management - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementNexusModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Configuration Details - -Required configuration items: -* BaseUrl: Nexus server address -* Repository: Raw repository name -* Username: Access username -* Password: Access password -* Format: Repository format, default is raw - -## Notes - -* This module requires Nexus server to support Raw repository type -* Ensure the configured user has sufficient permissions to access the Raw repository -* HTTPS is recommended for secure transmission - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.md deleted file mode 100644 index 98de7eb1d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/README.md +++ /dev/null @@ -1,43 +0,0 @@ -# LINGYUN.Abp.OssManagement.Nexus - -Nexus仓库的OSS管理模块实现 - -## 功能 - -* 实现基于Nexus Raw仓库的对象存储管理 -* 支持文件上传、下载和删除等基本操作 -* 支持文件分片上传和断点续传 -* 集成Nexus的访问控制和安全机制 -* 支持对象过期管理 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementNexusModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 配置说明 - -需要配置以下关键信息: -* BaseUrl:Nexus服务器地址 -* Repository:Raw仓库名称 -* Username:访问用户名 -* Password:访问密码 -* Format:仓库格式,默认为raw - -## 注意事项 - -* 此模块需要Nexus服务器支持Raw仓库类型 -* 需要确保配置的用户具有足够的权限访问Raw仓库 -* 建议使用HTTPS进行安全传输 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/System/IO/SystemExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/System/IO/SystemExtensions.cs deleted file mode 100644 index f0037ca87..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Nexus/System/IO/SystemExtensions.cs +++ /dev/null @@ -1,24 +0,0 @@ -using System.Security.Cryptography; -using System.Text; - -namespace System.IO; - -internal static class SystemExtensions -{ - public static string MD5(this Stream stream) - { - if (stream.CanSeek) - { - stream.Seek(0, SeekOrigin.Begin); - } - using MD5 md5 = new MD5CryptoServiceProvider(); - byte[] retVal = md5.ComputeHash(stream); - StringBuilder sb = new StringBuilder(); - for (int i = 0; i < retVal.Length; i++) - { - sb.Append(retVal[i].ToString("x2")); - } - stream.Seek(0, SeekOrigin.Begin); - return sb.ToString(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs deleted file mode 100644 index 60abf0008..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/IOssManagementSettingAppService.cs +++ /dev/null @@ -1,7 +0,0 @@ -using LINGYUN.Abp.SettingManagement; - -namespace LINGYUN.Abp.OssManagement.SettingManagement; - -public interface IOssManagementSettingAppService : IReadonlySettingAppService -{ -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs deleted file mode 100644 index b9cb26e27..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/LINGYUN/Abp/OssManagement/SettingManagement/OssManagementSettingController.cs +++ /dev/null @@ -1,35 +0,0 @@ -using LINGYUN.Abp.SettingManagement; -using Microsoft.AspNetCore.Mvc; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.AspNetCore.Mvc; - -namespace LINGYUN.Abp.OssManagement.SettingManagement; - -[RemoteService(Name = OssManagementRemoteServiceConsts.RemoteServiceName)] -[Area("settingManagement")] -[Route("api/setting-management/oss-management")] -public class OssManagementSettingController : AbpControllerBase, IOssManagementSettingAppService -{ - protected IOssManagementSettingAppService WeChatSettingAppService { get; } - - public OssManagementSettingController( - IOssManagementSettingAppService weChatSettingAppService) - { - WeChatSettingAppService = weChatSettingAppService; - } - - [HttpGet] - [Route("by-current-tenant")] - public async virtual Task GetAllForCurrentTenantAsync() - { - return await WeChatSettingAppService.GetAllForCurrentTenantAsync(); - } - - [HttpGet] - [Route("by-global")] - public async virtual Task GetAllForGlobalAsync() - { - return await WeChatSettingAppService.GetAllForGlobalAsync(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.EN.md deleted file mode 100644 index 4acfd433d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.EN.md +++ /dev/null @@ -1,49 +0,0 @@ -# LINGYUN.Abp.OssManagement.SettingManagement - -Object Storage Management Settings Management Module - -## Features - -* Provides settings management functionality for object storage management -* Implements settings reading and modification -* Supports multi-tenant configuration -* Supports different levels of settings management - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementSettingManagementModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Settings - -### Basic Settings -* DownloadPackageSize: Download package size -* FileLimitLength: File size limit -* AllowFileExtensions: Allowed file extensions - -### API Endpoints - -* GET /api/oss-management/settings: Get settings -* PUT /api/oss-management/settings: Update settings - -### Permissions - -* AbpOssManagement.Setting: Settings management permission - -## Notes - -* Appropriate permissions are required to access settings -* Some settings may require application restart to take effect -* It's recommended to backup current configuration before modifying settings - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.md deleted file mode 100644 index 30e6dcb4d..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.SettingManagement/README.md +++ /dev/null @@ -1,49 +0,0 @@ -# LINGYUN.Abp.OssManagement.SettingManagement - -对象存储管理设置管理模块 - -## 功能 - -* 提供对象存储管理的设置管理功能 -* 实现设置的读取和修改 -* 支持多租户配置 -* 支持不同级别的设置管理 - -## 配置使用 - -模块按需引用: - -```csharp -[DependsOn(typeof(AbpOssManagementSettingManagementModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 设置项 - -### 基础设置 -* DownloadPackageSize:下载包大小 -* FileLimitLength:文件大小限制 -* AllowFileExtensions:允许的文件扩展名 - -### API接口 - -* GET /api/oss-management/settings:获取设置 -* PUT /api/oss-management/settings:更新设置 - -### 权限 - -* AbpOssManagement.Setting:设置管理权限 - -## 注意事项 - -* 需要具有相应的权限才能访问设置 -* 某些设置可能需要重启应用才能生效 -* 建议在修改设置前备份当前配置 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xsd b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xsd deleted file mode 100644 index 11da52550..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/FodyWeavers.xsd +++ /dev/null @@ -1,30 +0,0 @@ - - - - - - - - - - - - - - - 'true' to run assembly verification (PEVerify) on the target assembly after all weavers have been executed. - - - - - A comma-separated list of error codes that can be safely ignored in assembly verification. - - - - - 'false' to turn off automatic generation of the XML Schema file. - - - - - \ No newline at end of file diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs deleted file mode 100644 index 1a9763916..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainer.cs +++ /dev/null @@ -1,478 +0,0 @@ -using COSXML; -using COSXML.Common; -using COSXML.Model.Bucket; -using COSXML.Model.Object; -using COSXML.Model.Service; -using COSXML.Model.Tag; -using COSXML.Transfer; -using LINGYUN.Abp.BlobStoring.Tencent; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System; -using System.Collections.Generic; -using System.IO; -using System.Linq; -using System.Net.Http; -using System.Threading.Tasks; -using Volo.Abp; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Timing; - -namespace LINGYUN.Abp.OssManagement.Tencent; - -/// -/// Oss容器的阿里云实现 -/// -internal class TencentOssContainer : OssContainerBase, IOssObjectExpireor -{ - protected IClock Clock { get; } - protected ICurrentTenant CurrentTenant { get; } - protected ICosClientFactory CosClientFactory { get; } - protected IHttpClientFactory HttpClientFactory { get; } - public TencentOssContainer( - IClock clock, - ICurrentTenant currentTenant, - ICosClientFactory cosClientFactory, - IHttpClientFactory httpClientFactory, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - : base(options, serviceScopeFactory) - { - Clock = clock; - CurrentTenant = currentTenant; - CosClientFactory = cosClientFactory; - HttpClientFactory = httpClientFactory; - } - public async override Task BulkDeleteObjectsAsync(BulkDeleteObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var path = GetBasePath(request.Path); - var deleteRequest = new DeleteMultiObjectRequest(request.Bucket); - deleteRequest.SetObjectKeys(request.Objects.Select(x => x += path).ToList()); - - ossClient.DeleteMultiObjects(deleteRequest); - } - - public async override Task CreateAsync(string name) - { - var ossClient = await CreateClientAsync(); - - if (BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerAlreadyExists); - } - - var putBucketRequest = new PutBucketRequest(name); - var bucketResult = ossClient.PutBucket(putBucketRequest); - - return new OssContainer( - bucketResult.Key, - Clock.Now, - 0L, - Clock.Now, - new Dictionary - { - { "Id", bucketResult.Key }, - { "DisplayName", bucketResult.Key } - }); - } - - public async override Task ObjectExistsAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - return ObjectExists(ossClient, request.Bucket, objectName); - } - - public async override Task CreateObjectAsync(CreateOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (!request.Overwrite && ObjectExists(ossClient, request.Bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectAlreadyExists); - } - - // 当一个对象名称是以 / 结尾时,不论该对象是否存有数据,都以目录的形式存在 - // 详情见:https://help.aliyun.com/document_detail/31910.html - if (objectName.EndsWith("/") && - request.Content.IsNullOrEmpty()) - { - var emptyStream = new MemoryStream(); - var emptyData = System.Text.Encoding.UTF8.GetBytes(""); - await emptyStream.WriteAsync(emptyData, 0, emptyData.Length); - request.SetContent(emptyStream); - } - - // 没有bucket则创建 - if (!BucketExists(ossClient, request.Bucket)) - { - var putBucketRequest = new PutBucketRequest(request.Bucket); - ossClient.PutBucket(putBucketRequest); - } - - var contentLength = request.Content.Length; - var putObjectRequest = new PutObjectRequest(request.Bucket, objectName, request.Content); - - var objectResult = ossClient.PutObject(putObjectRequest); - - if (objectResult.IsSuccessful() && request.ExpirationTime.HasValue) - { - var putBuckerLifeRequest = new PutBucketLifecycleRequest(request.Bucket); - - var rule = new COSXML.Model.Tag.LifecycleConfiguration.Rule(); - rule.id = "lfiecycleConfigureId"; - rule.status = "Enabled"; //Enabled,Disabled - - rule.filter = new COSXML.Model.Tag.LifecycleConfiguration.Filter(); - // TODO: 需要测试 - rule.filter.prefix = objectName; - - putBuckerLifeRequest.SetRule(rule); - - ossClient.PutBucketLifecycle(putBuckerLifeRequest); - } - - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? objectName.Replace(objectPath, "") - : objectName, - objectPath, - objectResult.eTag, - DateTime.Now, - contentLength, - DateTime.Now, - new Dictionary(), - objectName.EndsWith("/") // 名称结尾是 / 符号的则为目录:https://cloud.tencent.com/document/product/436/13324 - ) - { - FullName = objectName - }; - - if (!Equals(request.Content, Stream.Null)) - { - request.Content.Seek(0, SeekOrigin.Begin); - ossObject.SetContent(request.Content); - } - - return ossObject; - } - - public async virtual Task ExpireAsync(ExprieOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - if (BucketExists(ossClient, request.Bucket)) - { - var getBucketRequest = new GetBucketRequest(request.Bucket); - - var getBucketResult = ossClient.GetBucket(getBucketRequest); - - var removeKeys = new List(); - foreach (var content in getBucketResult.listBucket.contentsList) - { - if (DateTime.TryParse(content.lastModified, out var lastModified) && lastModified <= request.ExpirationTime) - { - removeKeys.Add(content.key); - } - } - - foreach (var removeKey in removeKeys) - { - ossClient.DeleteObject( - new DeleteObjectRequest(getBucketResult.listBucket.name, removeKey)); - } - } - } - - public async override Task DeleteObjectAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Path); - - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (BucketExists(ossClient, request.Bucket) && - ObjectExists(ossClient, request.Bucket, objectName)) - { - var getBucketRequest = new GetBucketRequest(request.Bucket); - - var getBucketResult = ossClient.GetBucket(getBucketRequest); - if (getBucketResult.listBucket.commonPrefixesList.Any() || - getBucketResult.listBucket.contentsList.Any()) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectDeleteWithNotEmpty); - } - var deleteObjectRequest = new DeleteObjectRequest(request.Bucket, objectName); - ossClient.DeleteObject(deleteObjectRequest); - } - } - - public async override Task ExistsAsync(string name) - { - var ossClient = await CreateClientAsync(); - - return BucketExists(ossClient, name); - } - - public async override Task GetAsync(string name) - { - var ossClient = await CreateClientAsync(); - if (!BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {name} in aliyun blob storing"); - } - var getBucketRequest = new GetBucketRequest(name); - var bucket = ossClient.GetBucket(getBucketRequest); - - return new OssContainer( - bucket.Key, - new DateTime(1970, 1, 1, 0, 0, 0), // TODO: 从header获取? 需要测试 - 0L, - null, - new Dictionary - { - { "Id", bucket.Key }, - { "DisplayName", bucket.Key } - }); - } - - public async override Task GetListAsync(GetOssContainersRequest request) - { - var ossClient = await CreateClientAsync(); - - // TODO: 腾讯云直接返回所有列表? - var getBucketRequest = new GetServiceRequest(); - var bucket = ossClient.GetService(getBucketRequest); - - return new GetOssContainersResponse( - request.Prefix, - request.Marker, - null, - bucket.listAllMyBuckets.buckets.Count, - bucket.listAllMyBuckets.buckets - .Select(x => new OssContainer( - x.name, - DateTime.TryParse(x.createDate, out var time) ? time : new DateTime(1970, 1, 1), - 0L, - null, - new Dictionary - { - { "Id", x.name }, - { "DisplayName", x.name } - })) - .ToList()); - } - - public async override Task GetObjectsAsync(GetOssObjectsRequest request) - { - - var ossClient = await CreateClientAsync(); - - var objectPath = GetBasePath(request.Prefix); - var marker = !objectPath.IsNullOrWhiteSpace() && !request.Marker.IsNullOrWhiteSpace() - ? request.Marker.Replace(objectPath, "") - : request.Marker; - - // TODO: 阿里云的分页差异需要前端来弥补,传递Marker, 按照Oss控制台的逻辑,直接把MaxKeys设置较大值就行了 - - var getBucketRequest = new GetBucketRequest(request.BucketName); - getBucketRequest.SetMarker(!marker.IsNullOrWhiteSpace() ? objectPath + marker : marker); - getBucketRequest.SetMaxKeys(request.MaxKeys?.ToString() ?? "10"); - getBucketRequest.SetPrefix(objectPath); - getBucketRequest.SetDelimiter(request.Delimiter); - getBucketRequest.SetEncodingType(request.EncodingType); - - var getBucketResult = ossClient.GetBucket(getBucketRequest); - - var ossObjects = getBucketResult.listBucket.contentsList - .Where(x => !x.key.Equals(objectPath))// 过滤当前的目录返回值 - .Select(x => new OssObject( - !objectPath.IsNullOrWhiteSpace() && !x.key.Equals(objectPath) - ? x.key.Replace(objectPath, "") - : x.key, // 去除目录名称 - request.Prefix, - x.eTag, - DateTime.TryParse(x.lastModified, out var ctime) ? ctime : null, - x.size, - DateTime.TryParse(x.lastModified, out var mtime) ? mtime : null, - new Dictionary - { - { "Id", x.key }, - { "DisplayName", x.key } - }, - x.key.EndsWith("/")) - { - FullName = x.key - }) - .ToList(); - // 当 Delimiter 为 / 时, objectsResponse.CommonPrefixes 可用于代表层级目录 - if (getBucketResult.listBucket.commonPrefixesList.Any()) - { - ossObjects.InsertRange(0, - getBucketResult.listBucket.commonPrefixesList - .Select(x => new OssObject( - x.prefix.Replace(objectPath, ""), - request.Prefix, - "", - null, - 0L, - null, - null, - true))); - } - // 排序 - // TODO: 是否需要客户端来排序 - ossObjects.Sort(new OssObjectComparer()); - - return new GetOssObjectsResponse( - getBucketResult.Key, - request.Prefix, - marker, - !objectPath.IsNullOrWhiteSpace() && !getBucketResult.listBucket.nextMarker.IsNullOrWhiteSpace() - ? getBucketResult.listBucket.nextMarker.Replace(objectPath, "") - : getBucketResult.listBucket.nextMarker, - getBucketResult.listBucket.delimiter, - getBucketResult.listBucket.maxKeys, - ossObjects); - } - - protected async override Task DeleteBucketAsync(string name) - { - // 腾讯云oss在控制台设置即可,无需改变 - var ossClient = await CreateClientAsync(); - - if (!BucketExists(ossClient, name)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - } - var deleteBucketRequest = new DeleteBucketRequest(name); - ossClient.DeleteBucket(deleteBucketRequest); - } - - protected async override Task GetOssObjectAsync(GetOssObjectRequest request) - { - var ossClient = await CreateClientAsync(); - if (!BucketExists(ossClient, request.Bucket)) - { - throw new BusinessException(code: OssManagementErrorCodes.ContainerNotFound); - // throw new ContainerNotFoundException($"Can't not found container {request.Bucket} in aliyun blob storing"); - } - - var objectPath = GetBasePath(request.Path); - var objectName = objectPath.IsNullOrWhiteSpace() - ? request.Object - : objectPath + request.Object; - - if (!ObjectExists(ossClient, request.Bucket, objectName)) - { - throw new BusinessException(code: OssManagementErrorCodes.ObjectNotFound); - // throw new ContainerNotFoundException($"Can't not found object {objectName} in container {request.Bucket} with aliyun blob storing"); - } - - var headObjectRequest = new HeadObjectRequest(request.Bucket, objectName); - var headObjectResult = ossClient.HeadObject(headObjectRequest); - - var ossObject = new OssObject( - !objectPath.IsNullOrWhiteSpace() - ? headObjectResult.Key.Replace(objectPath, "") - : headObjectResult.Key, - request.Path, - headObjectResult.eTag, - null, - headObjectResult.size, - null, - new Dictionary(), - headObjectResult.Key.EndsWith("/")) - { - FullName = headObjectResult.Key - }; - - if (headObjectResult.size > 0) - { - var configuration = await GetConfigurationAsync(); - // See: https://cloud.tencent.com/document/product/436/47238 - var preSignatureStruct = new PreSignatureStruct - { - appid = configuration.AppId,//"1250000000"; //腾讯云账号 APPID - region = configuration.Region,//"COS_REGION"; //存储桶地域 - bucket = request.Bucket,//"examplebucket-1250000000"; //存储桶 - key = objectName, //对象键 - httpMethod = "GET", //HTTP 请求方法 - isHttps = true, //生成 HTTPS 请求 URL - signDurationSecond = 600, //请求签名时间为600s - headers = null, //签名中需要校验的 header - queryParameters = null //签名中需要校验的 URL 中请求参数 - }; - if (!request.Process.IsNullOrWhiteSpace()) - { - preSignatureStruct.queryParameters = new Dictionary - { - { request.Process, "" } - }; - } - var requestSignURL = ossClient.GenerateSignURL(preSignatureStruct); - var client = HttpClientFactory.CreateTenantOssClient(); - - ossObject.SetContent(await client.GetStreamAsync(requestSignURL)); - } - - return ossObject; - } - - protected virtual string GetBasePath(string path) - { - string objectPath = ""; - if (CurrentTenant.Id == null) - { - objectPath += "host/"; - } - else - { - objectPath += "tenants/" + CurrentTenant.Id.Value.ToString("D"); - } - - objectPath += path ?? ""; - - return objectPath.EnsureEndsWith('/'); - } - - protected virtual bool BucketExists(CosXml cos, string bucketName) - { - var request = new DoesBucketExistRequest(bucketName); - return cos.DoesBucketExist(request); - } - - protected virtual bool ObjectExists(CosXml cos, string bucketName, string objectName) - { - var request = new DoesObjectExistRequest(bucketName, objectName); - return cos.DoesObjectExist(request); - } - - protected async virtual Task GetConfigurationAsync() - { - return await CosClientFactory.GetConfigurationAsync(); - } - - protected async virtual Task CreateClientAsync() - { - return await CosClientFactory.CreateAsync(); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs deleted file mode 100644 index 8f59ea33e..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/LINGYUN/Abp/OssManagement/Tencent/TencentOssContainerFactory.cs +++ /dev/null @@ -1,45 +0,0 @@ -using LINGYUN.Abp.BlobStoring.Tencent; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Options; -using System.Net.Http; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Timing; - -namespace LINGYUN.Abp.OssManagement.Tencent; - -public class TencentOssContainerFactory : IOssContainerFactory -{ - protected IClock Clock { get; } - protected ICurrentTenant CurrentTenant { get; } - protected ICosClientFactory CosClientFactory { get; } - protected IHttpClientFactory HttpClientFactory { get; } - protected IServiceScopeFactory ServiceScopeFactory { get; } - protected IOptions Options { get; } - - public TencentOssContainerFactory( - IClock clock, - ICurrentTenant currentTenant, - ICosClientFactory cosClientFactory, - IHttpClientFactory httpClientFactory, - IServiceScopeFactory serviceScopeFactory, - IOptions options) - { - Clock = clock; - CurrentTenant = currentTenant; - CosClientFactory = cosClientFactory; - HttpClientFactory = httpClientFactory; - Options = options; - ServiceScopeFactory = serviceScopeFactory; - } - - public IOssContainer Create() - { - return new TencentOssContainer( - Clock, - CurrentTenant, - CosClientFactory, - HttpClientFactory, - ServiceScopeFactory, - Options); - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentOssContainerServiceCollectionExtensions.cs b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentOssContainerServiceCollectionExtensions.cs deleted file mode 100644 index 7f672e7d4..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/Microsoft/Extensions/DependencyInjection/TencentOssContainerServiceCollectionExtensions.cs +++ /dev/null @@ -1,21 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Tencent; -using System; - -namespace Microsoft.Extensions.DependencyInjection; - -public static class TencentOssContainerServiceCollectionExtensions -{ - public static IServiceCollection AddTencentContainer(this IServiceCollection services) - { - services.AddTransient(); - - services.AddTransient(provider => - provider - .GetRequiredService() - .Create() - .As()); - - return services; - } -} diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.EN.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.EN.md deleted file mode 100644 index e182aa04a..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.EN.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.Tencent - -Tencent Cloud OSS container interface implementation - -## Features - -* Implements object storage management based on Tencent Cloud COS -* Supports basic operations including file upload, download, and deletion -* Supports file sharding upload and breakpoint continuation -* Integrates with Tencent Cloud COS access control and security mechanisms -* Supports object expiration management -* Supports temporary key access - -## Configuration - -Module reference as needed: - -```csharp -[DependsOn(typeof(AbpOssManagementTencentCloudModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## Configuration Details - -Required configuration items: -* SecretId: Tencent Cloud access key ID -* SecretKey: Tencent Cloud access key secret -* Region: Region information -* AppId: Application ID -* Bucket: Bucket name -* SecurityToken: Optional temporary security token - -## Notes - -* Recommended to use sub-account keys for access -* Recommended to enable server-side encryption -* Recommended to configure appropriate bucket policies -* Recommended to enable logging functionality - -## Links - -* [中文文档](./README.md) -* [Module documentation](../README.md) diff --git a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.md b/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.md deleted file mode 100644 index 3310a28ce..000000000 --- a/aspnet-core/modules/oss-management/LINGYUN.Abp.OssManagement.Tencent/README.md +++ /dev/null @@ -1,46 +0,0 @@ -# LINGYUN.Abp.OssManagement.Tencent - -腾讯云oss容器接口 - -## 功能 - -* 实现基于腾讯云COS的对象存储管理 -* 支持文件上传、下载和删除等基本操作 -* 支持文件分片上传和断点续传 -* 集成腾讯云COS的访问控制和安全机制 -* 支持对象过期管理 -* 支持临时密钥访问 - -## 配置使用 - -模块按需引用 - -```csharp -[DependsOn(typeof(AbpOssManagementTencentCloudModule))] -public class YouProjectModule : AbpModule -{ - // other -} -``` - -## 配置说明 - -需要配置以下关键信息: -* SecretId:腾讯云访问密钥ID -* SecretKey:腾讯云访问密钥密码 -* Region:地域信息 -* AppId:应用ID -* Bucket:存储桶名称 -* SecurityToken:可选的临时安全令牌 - -## 注意事项 - -* 建议使用子账号密钥进行访问 -* 建议开启服务端加密 -* 建议配置适当的存储桶策略 -* 建议启用日志记录功能 - -## 链接 - -* [English documentation](./README.EN.md) -* [模块说明](../README.md) diff --git a/aspnet-core/modules/oss-management/README.md b/aspnet-core/modules/oss-management/README.md deleted file mode 100644 index 47ae00b30..000000000 --- a/aspnet-core/modules/oss-management/README.md +++ /dev/null @@ -1,64 +0,0 @@ -# Oss-Management - -File-Management更名为Oss-Management - -## 模块说明 - -### 基础模块 - -* [LINGYUN.Abp.OssManagement.Domain.Shared](./LINGYUN.Abp.OssManagement.Domain.Shared) 领域层公共模块,定义了错误代码、本地化、模块设置 -* [LINGYUN.Abp.OssManagement.Domain](./LINGYUN.Abp.OssManagement.Domain) 领域层模块,定义了抽象的Oss容器与对象管理接口 -* [LINGYUN.Abp.OssManagement.Application.Contracts](./LINGYUN.Abp.OssManagement.Application.Contracts) 应用服务层公共模块,定义了管理Oss的外部接口、权限、功能限制策略 -* [LINGYUN.Abp.OssManagement.Application](./LINGYUN.Abp.OssManagement.Application) 应用服务层实现,实现了Oss管理接口 -* [LINGYUN.Abp.OssManagement.HttpApi](./LINGYUN.Abp.OssManagement.HttpApi) RestApi实现,实现了独立的对外RestApi接口 -* [LINGYUN.Abp.OssManagement.HttpApi.Client](./LINGYUN.Abp.OssManagement.HttpApi.Client) 客户端代理模块, 简化远程调用过程 -* [LINGYUN.Abp.OssManagement.SettingManagement](./LINGYUN.Abp.OssManagement.SettingManagement) 设置管理模块,对外暴露自身的设置管理,用于网关聚合 - -### 高阶模块 - -* [LINGYUN.Abp.BlobStoring.OssManagement](./LINGYUN.Abp.BlobStoring.OssManagement) abp框架对象存储提供者**IBlobProvider**的Oss管理模块实现, 依赖于Oss客户端代理模块 -* [LINGYUN.Abp.OssManagement.Aliyun](./LINGYUN.Abp.OssManagement.Aliyun) Oss管理的阿里云实现,实现了部分阿里云Oss服务的容器与对象管理 -* [LINGYUN.Abp.OssManagement.FileSystem](./LINGYUN.Abp.OssManagement.FileSystem) Oss管理的本地文件系统实现,实现了部分本地文件系统的容器(目录)与对象(文件/目录)管理 -* [LINGYUN.Abp.OssManagement.ImageSharp](./LINGYUN.Abp.OssManagement.ImageSharp) Oss对象的ImageSharp扩展,当前端传递需求处理对象时,此模块用于实现基于图形文件流的处理 -* [LINGYUN.Abp.OssManagement.Imaging](./LINGYUN.Abp.OssManagement.Imaging) Oss对象的Volo.Abp.Imaging扩展 -* [LINGYUN.Abp.OssManagement.Imaging.ImageSharp](./LINGYUN.Abp.OssManagement.Imaging.ImageSharp) Oss对象的Volo.Abp.Imaging.ImageSharp扩展 -* [LINGYUN.Abp.OssManagement.FileSystem.Imaging](./LINGYUN.Abp.OssManagement.FileSystem.Imaging) 本地文件系统的图像处理基础模块,提供图像处理接口和管道 -* [LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp](./LINGYUN.Abp.OssManagement.FileSystem.Imaging.ImageSharp) 基于ImageSharp的本地文件系统图像处理实现,提供高性能图像处理功能 -* [LINGYUN.Abp.OssManagement.Nexus](./LINGYUN.Abp.OssManagement.Nexus) Oss管理的Nexus实现,管理来自私有Nexus仓库的RAW存储类型 -* [LINGYUN.Abp.OssManagement.Minio](./LINGYUN.Abp.OssManagement.Minio) Oss管理的Minio实现,管理基于Minio的对象存储服务 -* [LINGYUN.Abp.OssManagement.Tencent](./LINGYUN.Abp.OssManagement.Tencent) Oss管理的腾讯云实现,实现了部分腾讯云Oss服务的容器与对象管理(未完全实现) - -### 权限定义 - -* AbpOssManagement.Container 授权对象是否允许访问容器(bucket) -* AbpOssManagement.Container.Create 授权对象是否允许创建容器(bucket) -* AbpOssManagement.Container.Delete 授权对象是否允许删除容器(bucket) -* AbpOssManagement.OssObject 授权对象是否允许访问Oss对象 -* AbpOssManagement.OssObject.Create 授权对象是否允许创建Oss对象 -* AbpOssManagement.OssObject.Delete 授权对象是否允许删除Oss对象 -* AbpOssManagement.OssObject.Download 授权对象是否允许下载Oss对象 - -### 功能定义 - -* AbpOssManagement.OssObject.DownloadFile 用户可以下载文件 -* AbpOssManagement.OssObject.DownloadLimit 用户在周期内允许下载文件的最大次数,范围0-1000000 -* AbpOssManagement.OssObject.DownloadInterval 用户限制下载文件次数的周期,时钟刻度:月,默认: 1,范围1-12 -* AbpOssManagement.OssObject.UploadFile 用户可以上传文件 -* AbpOssManagement.OssObject.UploadLimit 用户在周期内允许上传文件的最大次数,范围0-1000000 -* AbpOssManagement.OssObject.UploadInterval 用户限制上传文件次数的周期,时钟刻度:月,默认: 1,范围1-12 -* AbpOssManagement.OssObject.MaxUploadFileCount 单次上传文件的数量,未实现 - -### 配置定义 - -* Abp.OssManagement.DownloadPackageSize 下载分包大小,分块下载时单次传输的数据大小,未实现 -* Abp.OssManagement.FileLimitLength 上传文件限制大小,默认:100 -* Abp.OssManagement.AllowFileExtensions 允许的上传文件扩展名,多个扩展名以逗号分隔,默认:dll,zip,rar,txt,log,xml,config,json,jpeg,jpg,png,bmp,ico,xlsx,xltx,xls,xlt,docs,dots,doc,dot,pptx,potx,ppt,pot,chm - -## 更新日志 - -*【2021-03-10】 变更FileManagement命名空间为OssManagement -*【2021-10-22】 增加PublicFilesController用于身份认证通过的用户上传/下载文件,所有操作限定在用户目录下 -*【2021-12-13】 增加LINGYUN.Abp.BlobStoring.OssManagement用于实现Oss代理二进制文件存储 -*【2023-09-04】 集成Volo.Abp.Imaging模块用于图形文件流处理 -*【2023-10-11】 集成Nexus仓库实现基于Nexus Raw类型存储(**未完善**) -*【2024-10-24】 集成Volo.Abp.BlobStoring.Minio模块用于实现基于Minio的文件存储 \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionCreateOrUpdateDto.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionCreateOrUpdateDto.cs index 7cb6711dc..db53de6ff 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionCreateOrUpdateDto.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionCreateOrUpdateDto.cs @@ -16,6 +16,12 @@ public abstract class PermissionDefinitionCreateOrUpdateDto : IHasExtraPropertie [DynamicStringLength(typeof(PermissionDefinitionRecordConsts), nameof(PermissionDefinitionRecordConsts.MaxNameLength))] public string ParentName { get; set; } + [DynamicStringLength(typeof(PermissionDefinitionRecordConsts), nameof(PermissionDefinitionRecordConsts.MaxResourceNameLength))] + public string ResourceName { get; set; } + + [DynamicStringLength(typeof(PermissionDefinitionRecordConsts), nameof(PermissionDefinitionRecordConsts.MaxManagementPermissionNameLength))] + public string ManagementPermissionName { get; set; } + public bool IsEnabled { get; set; } public MultiTenancySides MultiTenancySide { get; set; } = MultiTenancySides.Both; diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionDto.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionDto.cs index 74b0188fb..155e0245c 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionDto.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/Dto/PermissionDefinitionDto.cs @@ -14,6 +14,10 @@ public class PermissionDefinitionDto : IHasExtraProperties public string GroupName { get; set; } + public string ResourceName { get; set; } + + public string ManagementPermissionName { get; set; } + public bool IsEnabled { get; set; } public bool IsStatic { get; set; } diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/IPermissionDefinitionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/IPermissionDefinitionAppService.cs index 6a696fb4d..5f260cec2 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/IPermissionDefinitionAppService.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Definitions/IPermissionDefinitionAppService.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -15,4 +16,6 @@ public interface IPermissionDefinitionAppService : IApplicationService Task UpdateAsync(string name, PermissionDefinitionUpdateDto input); Task> GetListAsync(PermissionDefinitionGetListInput input); + + Task>> GetAssignableProvidersAsync(); } diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json index 8e8800997..a7725f2b9 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/en.json @@ -38,6 +38,10 @@ "PermissionDefinitions:AddNew": "Add New", "BasicInfo": "Basic", "Properties": "Properties", - "StateCheckers": "State Checkers" + "StateCheckers": "State Checkers", + "PermissionProviders:C": "Client", + "PermissionProviders:R": "Role", + "PermissionProviders:U": "User", + "PermissionProviders:O": "Organization Unit" } } \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json index 6c990d85e..44b06d389 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application.Contracts/LINGYUN/Abp/PermissionManagement/Localization/Application/Contracts/zh-Hans.json @@ -39,6 +39,10 @@ "PermissionDefinitions:AddNew": "添加权限", "BasicInfo": "基本信息", "Properties": "属性", - "StateCheckers": "状态检查" + "StateCheckers": "状态检查", + "PermissionProviders:C": "客户端", + "PermissionProviders:R": "角色", + "PermissionProviders:U": "用户", + "PermissionProviders:O": "组织机构" } } \ No newline at end of file diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs index f9ae708be..444240f72 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/Definitions/PermissionDefinitionAppService.cs @@ -26,6 +26,7 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase private readonly ISimpleStateCheckerSerializer _simpleStateCheckerSerializer; private readonly ILocalizableStringSerializer _localizableStringSerializer; private readonly IPermissionDefinitionManager _permissionDefinitionManager; + private readonly IPermissionValueProviderManager _permissionValueProviderManager; private readonly IStaticPermissionDefinitionStore _staticPermissionDefinitionStore; private readonly IDynamicPermissionDefinitionStore _dynamicPermissionDefinitionStore; private readonly IPermissionDefinitionRecordRepository _definitionRepository; @@ -34,6 +35,7 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase public PermissionDefinitionAppService( ILocalizableStringSerializer localizableStringSerializer, IPermissionDefinitionManager permissionDefinitionManager, + IPermissionValueProviderManager permissionValueProviderManager, IStaticPermissionDefinitionStore staticPermissionDefinitionStore, IDynamicPermissionDefinitionStore dynamicPermissionDefinitionStore, ISimpleStateCheckerSerializer simpleStateCheckerSerializer, @@ -42,6 +44,7 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase { _localizableStringSerializer = localizableStringSerializer; _permissionDefinitionManager = permissionDefinitionManager; + _permissionValueProviderManager = permissionValueProviderManager; _staticPermissionDefinitionStore = staticPermissionDefinitionStore; _dynamicPermissionDefinitionStore = dynamicPermissionDefinitionStore; _simpleStateCheckerSerializer = simpleStateCheckerSerializer; @@ -49,6 +52,23 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase _definitionBasicRepository = definitionBasicRepository; } + public virtual Task>> GetAssignableProvidersAsync() + { + var providerNames = _permissionValueProviderManager.ValueProviders.Select(x => x.Name); + + return Task.FromResult(new ListResultDto>( + providerNames.Select(name => + { + var provider = new NameValue(name, name); + var displayName = L[$"PermissionProviders:{name}"]; + if (!displayName.ResourceNotFound) + { + provider.Name = displayName.Value; + } + return provider; + }).ToList())); + } + [Authorize(PermissionManagementPermissionNames.Definition.Create)] public async virtual Task CreateAsync(PermissionDefinitionCreateDto input) { @@ -75,6 +95,8 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase GuidGenerator.Create(), groupDefinition.Name, input.Name, + input.ResourceName, + input.ManagementPermissionName, input.ParentName, input.DisplayName, input.IsEnabled); @@ -172,6 +194,8 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase GuidGenerator.Create(), groupDefinition.Name, name, + input.ResourceName, + input.ManagementPermissionName, input.ParentName, input.DisplayName, input.IsEnabled); @@ -204,6 +228,14 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase { record.DisplayName = input.DisplayName; } + if (!string.Equals(record.ResourceName, input.ResourceName, StringComparison.InvariantCultureIgnoreCase)) + { + record.ResourceName = input.ResourceName; + } + if (!string.Equals(record.ManagementPermissionName, input.ManagementPermissionName, StringComparison.InvariantCultureIgnoreCase)) + { + record.ManagementPermissionName = input.ManagementPermissionName; + } string providers = null; if (!input.Providers.IsNullOrEmpty()) { @@ -279,6 +311,8 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase ParentName = definitionRecord.ParentName, IsEnabled = definitionRecord.IsEnabled, DisplayName = definitionRecord.DisplayName, + ResourceName = definitionRecord.ResourceName, + ManagementPermissionName = definitionRecord.ManagementPermissionName, Providers = definitionRecord.Providers?.Split(',').ToList(), StateCheckers = definitionRecord.StateCheckers, MultiTenancySide = definitionRecord.MultiTenancySide, @@ -303,6 +337,8 @@ public class PermissionDefinitionAppService : PermissionManagementAppServiceBase ParentName = definition.Parent?.Name, IsEnabled = definition.IsEnabled, Providers = definition.Providers, + ResourceName = definition.ResourceName, + ManagementPermissionName = definition.ManagementPermissionName, MultiTenancySide = definition.MultiTenancySide, DisplayName = _localizableStringSerializer.Serialize(definition.DisplayName), ExtraProperties = new ExtraPropertyDictionary(), diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs index b934cdbb3..806cd0de7 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.Application/LINGYUN/Abp/PermissionManagement/PermissionAppService.cs @@ -17,11 +17,21 @@ namespace LINGYUN.Abp.PermissionManagement; public class PermissionAppService : VoloPermissionAppService { public PermissionAppService( - IMultiplePermissionManager permissionManager, + IMultiplePermissionManager permissionManager, + IPermissionChecker permissionChecker, IPermissionDefinitionManager permissionDefinitionManager, + IResourcePermissionManager resourcePermissionManager, + IResourcePermissionGrantRepository resourcePermissionGrantRepository, IOptions options, ISimpleStateCheckerManager simpleStateCheckerManager) - : base(permissionManager, permissionDefinitionManager, options, simpleStateCheckerManager) + : base( + permissionManager, + permissionChecker, + permissionDefinitionManager, + resourcePermissionManager, + resourcePermissionGrantRepository, + options, + simpleStateCheckerManager) { } diff --git a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/Definitions/PermissionDefinitionController.cs b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/Definitions/PermissionDefinitionController.cs index 46b70a16d..66c7dae1b 100644 --- a/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/Definitions/PermissionDefinitionController.cs +++ b/aspnet-core/modules/permissions-management/LINGYUN.Abp.PermissionManagement.HttpApi/LINGYUN/Abp/PermissionManagement/HttpApi/Definitions/PermissionDefinitionController.cs @@ -23,6 +23,13 @@ public class PermissionDefinitionController : PermissionManagementControllerBase _service = service; } + [HttpGet] + [Route("assignable-providers")] + public virtual Task>> GetAssignableProvidersAsync() + { + return _service.GetAssignableProvidersAsync(); + } + [HttpPost] [Authorize(PermissionManagementPermissionNames.Definition.Create)] public virtual Task CreateAsync(PermissionDefinitionCreateDto input) diff --git a/aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin5/LINGYUN/Abp/UI/Navigation/VueVbenAdmin5/AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider.cs b/aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin5/LINGYUN/Abp/UI/Navigation/VueVbenAdmin5/AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider.cs index 1f2942eda..110e715f8 100644 --- a/aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin5/LINGYUN/Abp/UI/Navigation/VueVbenAdmin5/AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider.cs +++ b/aspnet-core/modules/platform/LINGYUN.Abp.UI.Navigation.VueVbenAdmin5/LINGYUN/Abp/UI/Navigation/VueVbenAdmin5/AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider.cs @@ -13,7 +13,7 @@ public class AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider : Navigati context.Add(GetAIManagement()); context.Add(GetSaas()); context.Add(GetPlatform()); - context.Add(GetOssManagement()); + context.Add(GetBlobManagement()); context.Add(GetTaskManagement()); context.Add(GetWebhooksManagement()); context.Add(GetTextTemplating()); @@ -677,31 +677,31 @@ public class AbpUINavigationVueVbenAdmin5NavigationDefinitionProvider : Navigati return new NavigationDefinition(platform); } - private static NavigationDefinition GetOssManagement() + private static NavigationDefinition GetBlobManagement() { var oss = new ApplicationMenu( - name: "Vben5Oss", + name: "Vben5BlobManagement", displayName: "对象存储", - url: "/oss", + url: "/blob-management", component: "", description: "对象存储", icon: "icon-park-outline:cloud-storage") .SetProperty("title", "abp.oss.title"); oss.AddItem( new ApplicationMenu( - name: "Vben5OssContainers", + name: "Vben5BlobContainers", displayName: "容器管理", - url: "/oss/containers", - component: "/oss/containers/index", + url: "/blob-management/blob-containers", + component: "/blob-management/containers/index", icon: "mdi:bucket-outline", description: "容器管理") .SetProperty("title", "abp.oss.containers")); oss.AddItem( new ApplicationMenu( - name: "Vben5OssObjects", + name: "Vben5BlobFiles", displayName: "文件管理", - url: "/oss/objects", - component: "/oss/objects/index", + url: "/blob-management/blobs", + component: "/blob-management/blobs/index", icon: "mdi-light:file", description: "文件管理") .SetProperty("title", "abp.oss.objects")); diff --git a/aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Messages/Dto/EmailMessageGetListInput.cs b/aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Messages/Dto/EmailMessageGetListInput.cs index e46d6591b..cd13a3c91 100644 --- a/aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Messages/Dto/EmailMessageGetListInput.cs +++ b/aspnet-core/modules/platform/LINGYUN.Platform.Application.Contracts/LINGYUN/Platform/Messages/Dto/EmailMessageGetListInput.cs @@ -5,6 +5,7 @@ using Volo.Abp.Application.Dtos; namespace LINGYUN.Platform.Messages; public class EmailMessageGetListInput : PagedAndSortedResultRequestDto { + public string Filter { get; set; } public string EmailAddress { get; set; } public string Content { get; set; } public string From { get; set; } diff --git a/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Messages/EmailMessageAppService.cs b/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Messages/EmailMessageAppService.cs index 1f887d2c2..6adca67d1 100644 --- a/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Messages/EmailMessageAppService.cs +++ b/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Messages/EmailMessageAppService.cs @@ -85,6 +85,9 @@ public class EmailMessageAppService : PlatformApplicationServiceBase, IEmailMess .AndIf(!Input.Subject.IsNullOrWhiteSpace(), x => x.Subject.Contains(Input.Subject)) .AndIf(!Input.Content.IsNullOrWhiteSpace(), x => x.Content.Contains(Input.Content)) .AndIf(!Input.From.IsNullOrWhiteSpace(), x => x.From.Contains(Input.From)) + .AndIf(!Input.Filter.IsNullOrWhiteSpace(), x => x.From.Contains(Input.Filter) || + x.Receiver.Contains(Input.Filter) || x.Content.Contains(Input.Filter) || + x.Subject.Contains(Input.Filter)) .AndIf(Input.Status.HasValue, x => x.Status == Input.Status) .AndIf(Input.Priority.HasValue, x => x.Priority == Input.Priority) .AndIf(Input.BeginSendTime.HasValue, x => x.SendTime >= Input.BeginSendTime) diff --git a/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Packages/PackageAppService.cs b/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Packages/PackageAppService.cs index eedec01ef..75f4376b9 100644 --- a/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Packages/PackageAppService.cs +++ b/aspnet-core/modules/platform/LINGYUN.Platform.Application/LINGYUN/Platform/Packages/PackageAppService.cs @@ -145,7 +145,8 @@ public class PackageAppService : PlatformApplicationServiceBase, IPackageAppServ var specification = new PackageSpecification(filter); var totalCount = await _packageRepository.GetCountAsync(specification); - var entities = await _packageRepository.GetListAsync(specification); + var entities = await _packageRepository.GetListAsync(specification, + input.Sorting, input.SkipCount, input.MaxResultCount); return new PagedResultDto( totalCount, diff --git a/aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Packages/PackageBlobManager.cs b/aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Packages/PackageBlobManager.cs index 2fdb7c4d3..7e2d92e03 100644 --- a/aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Packages/PackageBlobManager.cs +++ b/aspnet-core/modules/platform/LINGYUN.Platform.Domain/LINGYUN/Platform/Packages/PackageBlobManager.cs @@ -31,7 +31,7 @@ public class PackageBlobManager : DomainService, IPackageBlobManager, ITransient { var blobName = BlobNormalizer.Normalize(package, packageBlob); - await RemoveBlobAsync(blobName); + await RemoveBlobAsync(blobName, cancellationToken); } public async virtual Task DownloadBlobAsync( @@ -41,7 +41,7 @@ public class PackageBlobManager : DomainService, IPackageBlobManager, ITransient { packageBlob.Download(); - return await DownloadFromBlobAsync(package, packageBlob); + return await DownloadFromBlobAsync(package, packageBlob, cancellationToken); } public async virtual Task SaveBlobAsync( @@ -67,7 +67,7 @@ public class PackageBlobManager : DomainService, IPackageBlobManager, ITransient { var blobName = BlobNormalizer.Normalize(package, packageBlob); - return await PackageContainer.GetAsync(blobName); + return await PackageContainer.GetAsync(blobName, cancellationToken); } protected async virtual Task SaveToBlobAsync( diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application.Contracts/LINGYUN/Abp/Notifications/INotificationAppService.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application.Contracts/LINGYUN/Abp/Notifications/INotificationAppService.cs index 9df9f93a9..beb354e70 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application.Contracts/LINGYUN/Abp/Notifications/INotificationAppService.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application.Contracts/LINGYUN/Abp/Notifications/INotificationAppService.cs @@ -1,11 +1,12 @@ using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; namespace LINGYUN.Abp.Notifications; public interface INotificationAppService { - Task> GetAssignableProvidersAsync(); + Task>> GetAssignableProvidersAsync(); Task> GetAssignableNotifiersAsync(); diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/NotificationAppService.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/NotificationAppService.cs index efee89a25..49bc2738d 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/NotificationAppService.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/NotificationAppService.cs @@ -4,6 +4,7 @@ using System.Collections.Generic; using System.Globalization; using System.Linq; using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.TextTemplating; @@ -29,17 +30,21 @@ public class NotificationAppService : AbpNotificationsApplicationServiceBase, IN NotificationPublishProviderManager = notificationPublishProviderManager; } - public virtual Task> GetAssignableProvidersAsync() + public virtual Task>> GetAssignableProvidersAsync() { - var providers = NotificationPublishProviderManager - .Providers - .Select(x => new NotificationProviderDto - { - Name = x.Name - }) - .ToList(); + var providerNames = NotificationPublishProviderManager.Providers.Select(x => x.Name); - return Task.FromResult(new ListResultDto(providers)); + return Task.FromResult(new ListResultDto>( + providerNames.Select(name => + { + var provider = new NameValue(name, name); + var displayName = L[$"Providers:{name}"]; + if (!displayName.ResourceNotFound) + { + provider.Name = displayName.Value; + } + return provider; + }).ToList())); } public async virtual Task> GetAssignableNotifiersAsync() diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi.Client/ClientProxies/LINGYUN/Abp/Notifications/NotificationClientProxy.Generated.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi.Client/ClientProxies/LINGYUN/Abp/Notifications/NotificationClientProxy.Generated.cs index 4cffc8466..004f73ba8 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi.Client/ClientProxies/LINGYUN/Abp/Notifications/NotificationClientProxy.Generated.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi.Client/ClientProxies/LINGYUN/Abp/Notifications/NotificationClientProxy.Generated.cs @@ -43,8 +43,8 @@ public partial class NotificationClientProxy : ClientProxyBase>(nameof(GetAssignableTemplatesAsync)); } - public virtual async Task> GetAssignableProvidersAsync() + public virtual async Task>> GetAssignableProvidersAsync() { - return await RequestAsync>(nameof(GetAssignableProvidersAsync)); + return await RequestAsync>>(nameof(GetAssignableProvidersAsync)); } } diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi/LINGYUN/Abp/Notifications/NotificationController.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi/LINGYUN/Abp/Notifications/NotificationController.cs index b0b13c195..f91704b59 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi/LINGYUN/Abp/Notifications/NotificationController.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.HttpApi/LINGYUN/Abp/Notifications/NotificationController.cs @@ -55,7 +55,7 @@ public class NotificationController : AbpControllerBase, INotificationAppService [HttpGet] [Route("assignable-providers")] - public virtual Task> GetAssignableProvidersAsync() + public virtual Task>> GetAssignableProvidersAsync() { return NotificationAppService.GetAssignableProvidersAsync(); } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/ISettingDefinitionAppService.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/ISettingDefinitionAppService.cs index bf28198df..083ec8357 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/ISettingDefinitionAppService.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/ISettingDefinitionAppService.cs @@ -1,4 +1,5 @@ using System.Threading.Tasks; +using Volo.Abp; using Volo.Abp.Application.Dtos; using Volo.Abp.Application.Services; @@ -15,4 +16,6 @@ public interface ISettingDefinitionAppService : IApplicationService Task UpdateAsync(string name, SettingDefinitionUpdateDto input); Task DeleteOrRestoreAsync(string name); + + Task>> GetAssignableProvidersAsync(); } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/en.json b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/en.json index 1e68342c1..a9618ab5f 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/en.json +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/en.json @@ -29,11 +29,11 @@ "Definition:AddNew": "Add New", "DeleteOrRestore": "Delete/Restore", "ItemWillBeDeleteOrRestoreMessage": "If you have changed the Settings, you will revert to the default Settings. Otherwise, the custom Settings are removed.", - "Providers:Default": "Default", - "Providers:Configuration": "Config", - "Providers:Global": "Global", - "Providers:Tenant": "Tenant", - "Providers:User": "User", + "SettingProviders:D": "Default", + "SettingProviders:C": "Config", + "SettingProviders:G": "Global", + "SettingProviders:T": "Tenant", + "SettingProviders:U": "User", "BasicInfo": "Basic", "Properties": "Properties" } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/zh-Hans.json b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/zh-Hans.json index ec57aa9ce..36a1374a3 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/zh-Hans.json +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/Localization/Resources/zh-Hans.json @@ -29,11 +29,11 @@ "Definition:AddNew": "添加新设置", "DeleteOrRestore": "删除/还原", "ItemWillBeDeleteOrRestoreMessage": "如果已改变设置, 将还原到默认设置项。否则会删除自定义设置.", - "Providers:Default": "默认", - "Providers:Configuration": "配置", - "Providers:Global": "全局", - "Providers:Tenant": "租户", - "Providers:User": "用户", + "SettingProviders:D": "默认", + "SettingProviders:C": "配置", + "SettingProviders:G": "全局", + "SettingProviders:T": "租户", + "SettingProviders:U": "用户", "BasicInfo": "基本", "Properties": "属性" } diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingDefinitionAppService.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingDefinitionAppService.cs index d69cacc7a..c4c4ec994 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingDefinitionAppService.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.Application/LINGYUN/Abp/SettingManagement/SettingDefinitionAppService.cs @@ -20,6 +20,7 @@ public class SettingDefinitionAppService : SettingManagementAppServiceBase, ISet { private readonly IStringEncryptionService _stringEncryptionService; private readonly ISettingDefinitionManager _settingDefinitionManager; + private readonly ISettingValueProviderManager _settingValueProviderManager; private readonly IStaticSettingDefinitionStore _staticSettingDefinitionStore; private readonly IDynamicSettingDefinitionStore _dynamicSettingDefinitionStore; private readonly ILocalizableStringSerializer _localizableStringSerializer; @@ -31,7 +32,8 @@ public class SettingDefinitionAppService : SettingManagementAppServiceBase, ISet IStaticSettingDefinitionStore staticSettingDefinitionStore, IDynamicSettingDefinitionStore dynamicSettingDefinitionStore, ILocalizableStringSerializer localizableStringSerializer, - IRepository settingRepository) + IRepository settingRepository, + ISettingValueProviderManager settingValueProviderManager) { _stringEncryptionService = stringEncryptionService; _settingDefinitionManager = settingDefinitionManager; @@ -39,6 +41,7 @@ public class SettingDefinitionAppService : SettingManagementAppServiceBase, ISet _dynamicSettingDefinitionStore = dynamicSettingDefinitionStore; _localizableStringSerializer = localizableStringSerializer; _settingRepository = settingRepository; + _settingValueProviderManager = settingValueProviderManager; } [Authorize(SettingManagementPermissions.Definition.Create)] @@ -132,6 +135,23 @@ public class SettingDefinitionAppService : SettingManagementAppServiceBase, ISet .ToList()); } + public virtual Task>> GetAssignableProvidersAsync() + { + var providerNames = _settingValueProviderManager.Providers.Select(x => x.Name); + + return Task.FromResult(new ListResultDto>( + providerNames.Select(name => + { + var provider = new NameValue(name, name); + var displayName = L[$"SettingProviders:{name}"]; + if (!displayName.ResourceNotFound) + { + provider.Name = displayName.Value; + } + return provider; + }).ToList())); + } + [Authorize(SettingManagementPermissions.Definition.Update)] public async virtual Task UpdateAsync(string name, SettingDefinitionUpdateDto input) { diff --git a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingDefinitionController.cs b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingDefinitionController.cs index 3a2a7005d..e57b0f854 100644 --- a/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingDefinitionController.cs +++ b/aspnet-core/modules/settings/LINGYUN.Abp.SettingManagement.HttpApi/LINGYUN/Abp/SettingManagement/SettingDefinitionController.cs @@ -55,4 +55,11 @@ public class SettingDefinitionController : AbpControllerBase, ISettingDefinition { return _service.UpdateAsync(name, input); } + + [HttpGet] + [Route("assignable-providers")] + public virtual Task>> GetAssignableProvidersAsync() + { + return _service.GetAssignableProvidersAsync(); + } } diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/Class1.cs b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/Class1.cs new file mode 100644 index 000000000..e7eb8a185 --- /dev/null +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/Class1.cs @@ -0,0 +1,6 @@ +namespace LINGYUN.Abp.BackgroundTasks.TickerQ; + +public class Class1 +{ + +} diff --git a/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/LINGYUN.Abp.BackgroundTasks.TickerQ.csproj b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/LINGYUN.Abp.BackgroundTasks.TickerQ.csproj new file mode 100644 index 000000000..f8c9928a7 --- /dev/null +++ b/aspnet-core/modules/task-management/LINGYUN.Abp.BackgroundTasks.TickerQ/LINGYUN.Abp.BackgroundTasks.TickerQ.csproj @@ -0,0 +1,24 @@ + + + + + + + netstandard2.0;netstandard2.1;net8.0;net9.0 + LINGYUN.Abp.BackgroundTasks.TickerQ + LINGYUN.Abp.BackgroundTasks.TickerQ + false + false + false + + + + + + + + + + + + diff --git a/aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Scriban/LINGYUN/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs b/aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Scriban/LINGYUN/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs index 473f15e0a..da22a5c78 100644 --- a/aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Scriban/LINGYUN/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs +++ b/aspnet-core/modules/text-templating/LINGYUN.Abp.TextTemplating.Scriban/LINGYUN/Abp/TextTemplating/Scriban/ScribanTemplateLocalizer.cs @@ -18,16 +18,16 @@ public class ScribanTemplateLocalizer : IScriptCustomFunction _localizer = localizer; } - public object Invoke(TemplateContext context, ScriptNode callerContext, ScriptArray arguments, - ScriptBlockStatement blockStatement) + public object? Invoke(TemplateContext context, ScriptNode? callerContext, ScriptArray arguments, + ScriptBlockStatement? blockStatement) { return GetString(arguments); } - public ValueTask InvokeAsync(TemplateContext context, ScriptNode callerContext, ScriptArray arguments, - ScriptBlockStatement blockStatement) + public ValueTask InvokeAsync(TemplateContext context, ScriptNode? callerContext, ScriptArray arguments, + ScriptBlockStatement? blockStatement) { - return new ValueTask(GetString(arguments)); + return new ValueTask(GetString(arguments)); } private string GetString(ScriptArray arguments) @@ -43,7 +43,7 @@ public class ScribanTemplateLocalizer : IScriptCustomFunction return string.Empty; } - var args = arguments.Skip(1).Where(x => x != null && !x.ToString().IsNullOrWhiteSpace()).ToArray(); + var args = arguments.Skip(1).Where(x => x != null && !x.ToString().IsNullOrWhiteSpace()).Cast().ToArray(); return args.Any() ? _localizer[name.ToString()!, args] : _localizer[name.ToString()!]; } diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/ChatMessageEventHandler.cs b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/ChatMessageEventHandler.cs index 2bf7977de..024a95830 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/ChatMessageEventHandler.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/ChatMessageEventHandler.cs @@ -5,6 +5,7 @@ using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using Volo.Abp.DependencyInjection; using Volo.Abp.EventBus.Distributed; +using ChatMessage = LINGYUN.Abp.IM.Messages.ChatMessage; namespace LY.MicroService.Applications.Single.EventBus.Distributed { diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantSynchronizer.cs b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantEventHandler.cs similarity index 83% rename from aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantSynchronizer.cs rename to aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantEventHandler.cs index 1f60bf807..325a36bd0 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantSynchronizer.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Distributed/TenantEventHandler.cs @@ -1,29 +1,24 @@ using LINGYUN.Abp.Saas.Tenants; using LY.MicroService.Applications.Single.MultiTenancy; -using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EventBus.Distributed; -using Volo.Abp.MultiTenancy; using Volo.Abp.Uow; namespace LY.MicroService.Applications.Single.EventBus.Distributed { - public class TenantSynchronizer : + public class TenantEventHandler : IDistributedEventHandler>, IDistributedEventHandler>, IDistributedEventHandler>, IDistributedEventHandler, ITransientDependency { - protected IDataSeeder DataSeeder { get; } protected ITenantConfigurationCache TenantConfigurationCache { get; } - public TenantSynchronizer( - IDataSeeder dataSeeder, + public TenantEventHandler( ITenantConfigurationCache tenantConfigurationCache) { - DataSeeder = dataSeeder; TenantConfigurationCache = tenantConfigurationCache; } @@ -31,8 +26,6 @@ namespace LY.MicroService.Applications.Single.EventBus.Distributed public async virtual Task HandleEventAsync(EntityCreatedEto eventData) { await TenantConfigurationCache.RefreshAsync(); - - await DataSeeder.SeedAsync(eventData.Entity.Id); } public async virtual Task HandleEventAsync(EntityUpdatedEto eventData) diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Local/PrivateBlobProtecteder.cs b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Local/PrivateBlobProtecteder.cs new file mode 100644 index 000000000..8e6d163a0 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.Applications.Single/EventBus/Local/PrivateBlobProtecteder.cs @@ -0,0 +1,74 @@ +using LINGYUN.Abp.BlobManagement.Permissions; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.Users; + +namespace LY.MicroService.Applications.Single.EventBus.Local; + +public class PrivateBlobProtecteder : + ILocalEventHandler>, + ILocalEventHandler>, + ITransientDependency +{ + private readonly IResourcePermissionManager _resourcePermissionManager; + private readonly IBlobContainerRepository _blobContainerRepository; + private readonly ICurrentUser _currentUser; + + public PrivateBlobProtecteder( + IResourcePermissionManager resourcePermissionManager, + IBlobContainerRepository blobContainerRepository, + ICurrentUser currentUser) + { + _resourcePermissionManager = resourcePermissionManager; + _blobContainerRepository = blobContainerRepository; + _currentUser = currentUser; + } + + public async virtual Task HandleEventAsync(EntityCreatedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, true); + } + } + + public async virtual Task HandleEventAsync(EntityDeletedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, false); + } + } + + protected async virtual Task ShouldSetResourcePermissions(Blob blob) + { + if (!_currentUser.IsAuthenticated) + { + return false; + } + var blobContainer = await _blobContainerRepository.GetAsync(blob.ContainerId); + if (!string.Equals(PrivateBlobPolicyCheckProvider.ProviderName, blobContainer.Name, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + + return true; + } + + protected async virtual Task SetResourcePermissions(Blob blob, bool isGranted) + { + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.Delete, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.View, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + } +} + diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/GlobalUsings.cs b/aspnet-core/services/LY.MicroService.Applications.Single/GlobalUsings.cs index 9d4cd5b4a..8674d8500 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/GlobalUsings.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/GlobalUsings.cs @@ -4,6 +4,11 @@ global using Elsa.Options; global using LINGYUN.Abp.Account; global using LINGYUN.Abp.Account.Web.OAuth; global using LINGYUN.Abp.Account.Web.OpenIddict; +global using LINGYUN.Abp.AI; +global using LINGYUN.Abp.AI.Agent; +global using LINGYUN.Abp.AI.Tools.Http; +global using LINGYUN.Abp.AI.Tools.Mcp; +global using LINGYUN.Abp.AIManagement; global using LINGYUN.Abp.Aliyun.Localization; global using LINGYUN.Abp.Aliyun.SettingManagement; global using LINGYUN.Abp.AspNetCore.HttpOverrides; @@ -18,10 +23,16 @@ global using LINGYUN.Abp.BackgroundTasks; global using LINGYUN.Abp.BackgroundTasks.Activities; global using LINGYUN.Abp.BackgroundTasks.DistributedLocking; global using LINGYUN.Abp.BackgroundTasks.EventBus; -global using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; global using LINGYUN.Abp.BackgroundTasks.Jobs; global using LINGYUN.Abp.BackgroundTasks.Notifications; global using LINGYUN.Abp.BackgroundTasks.Quartz; +global using LINGYUN.Abp.BlobManagement; +global using LINGYUN.Abp.BlobManagement.Aliyun; +global using LINGYUN.Abp.BlobManagement.FileSystem; +global using LINGYUN.Abp.BlobManagement.Minio; +global using LINGYUN.Abp.BlobManagement.SettingManagement; +global using LINGYUN.Abp.BlobManagement.Tencent; +global using LINGYUN.Abp.BlobStoring.BlobManagement; global using LINGYUN.Abp.CachingManagement; global using LINGYUN.Abp.CachingManagement.StackExchangeRedis; global using LINGYUN.Abp.Dapr.Client; @@ -39,7 +50,7 @@ global using LINGYUN.Abp.Elsa.EntityFrameworkCore; global using LINGYUN.Abp.EventBus.CAP; global using LINGYUN.Abp.ExceptionHandling; global using LINGYUN.Abp.ExceptionHandling.Emailing; -global using LINGYUN.Abp.Exporter.MiniExcel; +global using LINGYUN.Abp.Exporter.MiniSoftware; global using LINGYUN.Abp.Features.LimitValidation; global using LINGYUN.Abp.Features.LimitValidation.Redis.Client; global using LINGYUN.Abp.Gdpr; @@ -85,11 +96,6 @@ global using LINGYUN.Abp.OpenIddict.QrCode; global using LINGYUN.Abp.OpenIddict.Sms; global using LINGYUN.Abp.OpenIddict.WeChat; global using LINGYUN.Abp.OpenIddict.WeChat.Work; -global using LINGYUN.Abp.OssManagement; -global using LINGYUN.Abp.OssManagement.FileSystem; -global using LINGYUN.Abp.OssManagement.Imaging; -global using LINGYUN.Abp.OssManagement.Minio; -global using LINGYUN.Abp.OssManagement.SettingManagement; global using LINGYUN.Abp.PermissionManagement.HttpApi; global using LINGYUN.Abp.PermissionManagement.OrganizationUnits; global using LINGYUN.Abp.Saas; @@ -98,6 +104,7 @@ global using LINGYUN.Abp.Serilog.Enrichers.Application; global using LINGYUN.Abp.Serilog.Enrichers.UniqueId; global using LINGYUN.Abp.SettingManagement; global using LINGYUN.Abp.Sms.Aliyun; +global using LINGYUN.Abp.SystemInfo; global using LINGYUN.Abp.TaskManagement; global using LINGYUN.Abp.TaskManagement.EntityFrameworkCore; global using LINGYUN.Abp.Tencent.Localization; @@ -135,21 +142,24 @@ global using LY.MicroService.Applications.Single.Bundling; global using LY.MicroService.Applications.Single.EntityFrameworkCore.MySql; global using LY.MicroService.Applications.Single.EntityFrameworkCore.PostgreSql; global using LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer; -//global using LY.MicroService.Applications.Single.EntityFrameworkCore.SqlServer; global using LY.MicroService.Applications.Single.Messages; global using Medallion.Threading; global using Medallion.Threading.Redis; +global using Microsoft.Agents.AI; global using Microsoft.AspNetCore.Authentication.JwtBearer; global using Microsoft.AspNetCore.Cors; global using Microsoft.AspNetCore.DataProtection; global using Microsoft.AspNetCore.Extensions.DependencyInjection; global using Microsoft.AspNetCore.Identity; global using Microsoft.AspNetCore.Server.Kestrel.Core; +global using Microsoft.AspNetCore.SignalR; +global using Microsoft.Extensions.AI; global using Microsoft.Extensions.Caching.StackExchangeRedis; global using Microsoft.Extensions.DependencyInjection; +global using Microsoft.Extensions.DependencyInjection.Extensions; global using Microsoft.IdentityModel.Logging; global using Microsoft.IdentityModel.Tokens; -global using Microsoft.OpenApi.Models; +global using Microsoft.OpenApi; global using MiniExcelLibs.Attributes; global using OpenIddict.Server; global using OpenIddict.Server.AspNetCore; @@ -166,6 +176,7 @@ global using Volo.Abp.AspNetCore.Mvc; global using Volo.Abp.AspNetCore.Mvc.AntiForgery; global using Volo.Abp.AspNetCore.Mvc.UI.Bundling; global using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite; +global using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; global using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared.Bundling; global using Volo.Abp.AspNetCore.Serilog; global using Volo.Abp.Auditing; @@ -181,6 +192,7 @@ global using Volo.Abp.FeatureManagement.EntityFrameworkCore; global using Volo.Abp.Features; global using Volo.Abp.GlobalFeatures; global using Volo.Abp.Http.Client; +global using Volo.Abp.Http.Client.IdentityModel.Web; global using Volo.Abp.Identity.Localization; global using Volo.Abp.Identity.Web; global using Volo.Abp.Imaging; diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj index 8be6e72cc..c2023f0f5 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj +++ b/aspnet-core/services/LY.MicroService.Applications.Single/LY.MicroService.Applications.Single.csproj @@ -7,7 +7,7 @@ enable LY.MicroService.Applications.Single enable - 10.0.2 + 10.2.0 @@ -56,6 +56,7 @@ + @@ -91,7 +92,7 @@ - + @@ -145,6 +146,15 @@ + + + + + + + + + @@ -191,7 +201,6 @@ - @@ -223,15 +232,6 @@ - - - - - - - - - @@ -258,7 +258,6 @@ - diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs index 965f4c514..4d759c6e1 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.Configure.cs @@ -1,10 +1,4 @@ -using LINGYUN.Abp.AI; -using LINGYUN.Abp.AI.Agent; -using LINGYUN.Abp.AIManagement; -using Microsoft.Agents.AI; -using Microsoft.AspNetCore.SignalR; -using Microsoft.Extensions.AI; -using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; +using Swashbuckle.AspNetCore.SwaggerGen; using VoloAbpExceptionHandlingOptions = Volo.Abp.AspNetCore.ExceptionHandling.AbpExceptionHandlingOptions; namespace LY.MicroService.Applications.Single; @@ -311,7 +305,7 @@ public partial class MicroServiceApplicationsSingleModule // options.SubstituteApiVersionInUrl = true; //}); services.AddRazorPages(); - services.AddControllersWithViews().AddNewtonsoftJson(); + services.AddControllersWithViews();//.AddNewtonsoftJson(); } private void ConfigureKestrelServer(IConfiguration configuration, IWebHostEnvironment environment) @@ -685,7 +679,20 @@ public partial class MicroServiceApplicationsSingleModule Url = new Uri("https://github.com/colinin/abp-next-admin/blob/master/LICENSE") } }); - options.DocInclusionPredicate((docName, description) => true); + options.DocInclusionPredicate((docName, description) => + { + if (description.TryGetMethodInfo(out var methodInfo)) + { + var controllerNamespace = methodInfo.DeclaringType?.Namespace; + if (controllerNamespace?.StartsWith("Elsa") == true) + { + // TODO: Elsa 2.x 使用 Swashbuckle 6.x版本不兼容, 忽略Swagger文档 + return false; + } + } + + return true; + }); options.CustomSchemaIds(type => type.FullName); options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme { @@ -696,16 +703,6 @@ public partial class MicroServiceApplicationsSingleModule Type = SecuritySchemeType.Http, BearerFormat = "JWT" }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement - { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); options.OperationFilter(); }); } @@ -866,11 +863,13 @@ public partial class MicroServiceApplicationsSingleModule }); // 用于消息中心邮件集中发送 - services.Replace(ServiceLifetime.Transient); + services.Replace( + ServiceDescriptor.Transient()); services.AddKeyedTransient("DefaultEmailSender"); // 用于消息中心短信集中发送 - services.Replace(ServiceLifetime.Transient); + services.Replace( + ServiceDescriptor.Transient()); services.AddKeyedSingleton("DefaultSmsSender"); } diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs index 00db6373d..e8693c8c6 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/MicroServiceApplicationsSingleModule.cs @@ -1,7 +1,4 @@ -using LINGYUN.Abp.AI.Tools.Http; -using LINGYUN.Abp.AI.Tools.Mcp; -using LINGYUN.Abp.AIManagement; -using LINGYUN.Abp.SystemInfo; +using LINGYUN.Abp.Exporter.MiniSoftware; namespace LY.MicroService.Applications.Single; @@ -105,8 +102,6 @@ namespace LY.MicroService.Applications.Single; // 通知模块 实体框架 typeof(AbpNotificationsEntityFrameworkCoreModule), - // OpenIddict扩展模块 自定义身份标识 - typeof(LINGYUN.Abp.OpenIddict.AspNetCore.AbpOpenIddictAspNetCoreModule), // OpenIddict扩展模块 会话 typeof(AbpOpenIddictAspNetCoreSessionModule), // OpenIddict扩展模块 应用服务 @@ -126,20 +121,24 @@ namespace LY.MicroService.Applications.Single; // OpenIddict扩展模块 扫码登录 typeof(AbpOpenIddictQrCodeModule), - // 对象存储模块 Minio - typeof(AbpOssManagementMinioModule), + // 对象存储模块 阿里云 + typeof(AbpBlobManagementAliyunModule), // 对象存储模块 文件系统 - typeof(AbpOssManagementFileSystemModule), - // 对象存储模块 图片处理 - typeof(AbpOssManagementImagingModule), + typeof(AbpBlobManagementFileSystemModule), + // 对象存储模块 Minio + typeof(AbpBlobManagementMinioModule), + // 对象存储模块 腾讯云 + typeof(AbpBlobManagementTencentModule), // 对象存储模块 应用服务 - typeof(AbpOssManagementDomainModule), + typeof(AbpBlobManagementDomainModule), // 对象存储模块 控制器 - typeof(AbpOssManagementApplicationModule), + typeof(AbpBlobManagementApplicationModule), // 对象存储模块 控制器 - typeof(AbpOssManagementHttpApiModule), + typeof(AbpBlobManagementHttpApiModule), // 对象存储模块 设置管理 - typeof(AbpOssManagementSettingManagementModule), + typeof(AbpBlobManagementSettingManagementModule), + // 对象存储模块 通用存储代理 + typeof(AbpBlobStoringBlobManagementModule), // 图形处理模块 typeof(AbpImagingImageSharpModule), @@ -258,8 +257,6 @@ namespace LY.MicroService.Applications.Single; typeof(AbpBackgroundTasksDistributedLockingModule), // 后台任务模块 事件总线 typeof(AbpBackgroundTasksEventBusModule), - // 后台任务模块 异常处理 - typeof(AbpBackgroundTasksExceptionHandlingModule), // 后台任务模块 默认作业 typeof(AbpBackgroundTasksJobsModule), // 后台任务模块 通知 @@ -383,8 +380,8 @@ namespace LY.MicroService.Applications.Single; // Elsa工作流设计器模块 typeof(AbpElsaDesignerModule), - // 数据导出模块 MiniExcel集成 - typeof(AbpExporterMiniExcelModule), + // 数据导出模块 MiniSoftware集成 + typeof(AbpExporterMiniSoftwareModule), // 虚拟文件浏览器 Mvc视图 typeof(AbpVirtualFileExplorerWebModule), @@ -392,6 +389,7 @@ namespace LY.MicroService.Applications.Single; typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpAspNetCoreMvcIdempotentWrapperModule), typeof(AbpAspNetCoreHttpOverridesModule), + typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpSwashbuckleModule), typeof(AbpMailKitModule), typeof(AbpAutofacModule), diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/Program.cs b/aspnet-core/services/LY.MicroService.Applications.Single/Program.cs index 6641c1a9b..f3025112c 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/Program.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/Program.cs @@ -73,6 +73,6 @@ app.UseAbpSwaggerUI(options => app.UseAuditing(); app.UseAbpSerilogEnrichers(); app.UseConfiguredEndpoints(); -app.UseHttpActivities(); +// app.UseHttpActivities(); await app.RunAsync(); diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.Applications.Single/TenantHeaderParamter.cs index 35441b45d..05f73eee9 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.Applications.Single/TenantHeaderParamter.cs @@ -1,8 +1,6 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; -using System.Collections.Generic; -using Volo.Abp.MultiTenancy; using Volo.Abp.AspNetCore.MultiTenancy; namespace LY.MicroService.Applications.Single; @@ -23,7 +21,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters ??= new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json b/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json index 722768b29..582698e86 100644 --- a/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.Applications.Single/appsettings.Development.json @@ -155,10 +155,10 @@ "UserCode": "00:10:00" } }, - "OssManagement": { + "BlobManagement": { "Provider": "FileSystem", "FileSystem": { - "Bucket": "blobs", + "BasePath": "blobs", "AppendContainerNameToBasePath": true } }, @@ -196,6 +196,12 @@ "WebhooksManagement": { "IsDynamicStoreEnabled": true }, + "RemoteServices": { + "BlobManagement": { + "BaseUrl": "http://localhost:30000/", + "UseCurrentAccessToken": true + } + }, "Logging": { "Serilog": { "Elasticsearch": { diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs index 9f3207fb2..79dba2c1c 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs @@ -1,5 +1,4 @@ using DotNetCore.CAP; -using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Identity.Session; @@ -22,10 +21,11 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -119,15 +119,6 @@ public partial class AuthServerHttpApiHostModule { Configure(options => { - // all container use oss management - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - // use oss management - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket]; - }); - }); }); } @@ -392,25 +383,17 @@ public partial class AuthServerHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs index 23fdc6bb0..6001490f1 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.cs @@ -4,12 +4,13 @@ using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Emailing.Platform; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Gdpr.Identity; @@ -35,7 +36,6 @@ using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching.StackExchangeRedis; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client; using Volo.Abp.Modularity; @@ -64,7 +64,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpGdprHttpApiModule), typeof(AbpGdprDomainIdentityModule), typeof(AbpGdprEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), @@ -73,7 +73,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpAuthorizationOrganizationUnitsModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpEmailingExceptionHandlingModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpCAPEventBusModule), typeof(AbpHttpClientModule), typeof(AbpSmsPlatformModule), @@ -86,7 +86,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj index 9b7974e7a..a513ec357 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/LY.MicroService.AuthServer.HttpApi.Host.csproj @@ -5,7 +5,7 @@ net10.0 LY.MicroService.AuthServer - Debug;Release;PostgreSQL + Debug;Release AnyCPU @@ -30,7 +30,6 @@ - @@ -49,7 +48,8 @@ - + + @@ -74,7 +74,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/TenantHeaderParamter.cs index aab02ba18..ea29b40a8 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs index 0080c2059..2f35fc664 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs @@ -1,6 +1,5 @@ using DotNetCore.CAP; using LINGYUN.Abp.AspNetCore.MultiTenancy; -using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement; using LINGYUN.Abp.OpenIddict.AspNetCore.Session; @@ -244,13 +243,6 @@ public partial class AuthServerModule { Configure(options => { - options.Containers.ConfigureAll((containerName, containerConfiguration) => - { - containerConfiguration.UseOssManagement(config => - { - configuration.GetSection("OssManagement").Bind(config); - }); - }); }); } diff --git a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Seeder.cs b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Seeder.cs deleted file mode 100644 index ff822c9ed..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.AuthServer.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.AuthServer; - -public partial class AuthServerModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs index 8c4b2d3c3..1d907ed24 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.cs @@ -5,11 +5,11 @@ using LINGYUN.Abp.AspNetCore.HttpOverrides; using LINGYUN.Abp.AspNetCore.MultiTenancy; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.Web; using LINGYUN.Abp.Identity.AspNetCore.Session; @@ -50,7 +50,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpAccountHttpApiModule), typeof(AbpAccountWebOpenIddictModule), typeof(AbpAccountWebOAuthModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpGdprApplicationModule), typeof(AbpGdprHttpApiModule), typeof(AbpGdprWebModule), @@ -76,7 +76,7 @@ namespace LY.MicroService.AuthServer; typeof(AbpAspNetCoreHttpOverridesModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpEmailingPlatformModule), typeof(AbpSmsPlatformModule), typeof(AbpCAPEventBusModule) @@ -120,7 +120,6 @@ public partial class AuthServerModule : AbpModule ConfigureMvc(context.Services, configuration); ConfigureCors(context.Services, configuration); ConfigureDistributedLocking(context.Services, configuration); - ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment()); ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); } diff --git a/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeedContributor.cs b/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeedContributor.cs deleted file mode 100644 index cb82da649..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeedContributor.cs +++ /dev/null @@ -1,309 +0,0 @@ -using Microsoft.Extensions.Configuration; -using OpenIddict.Abstractions; -using System; -using System.Collections.Generic; -using System.Globalization; -using System.Threading.Tasks; -using Volo.Abp.Authorization.Permissions; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; -using Volo.Abp.MultiTenancy; -using Volo.Abp.OpenIddict.Applications; -using Volo.Abp.OpenIddict.Scopes; -using Volo.Abp.PermissionManagement; - -namespace LY.MicroService.AuthServer.DataSeeder; - -public class ServerDataSeedContributor : IDataSeedContributor, ITransientDependency -{ - public static HashSet InitializeScopes = new HashSet - { - // obsolete! microservice should be allocated separately - "lingyun-abp-application", - // admin service - "ams", - // identity service - "ids", - // localization service - "lts", - // platform service - "pts", - // message service - "mgs", - // task service - "tks", - // webhook service - "wks", - // workflow service - "wfs", - // wechat service - "was" - }; - - private readonly IConfiguration _configuration; - private readonly ICurrentTenant _currentTenant; - private readonly IOpenIddictApplicationManager _applicationManager; - private readonly IOpenIddictApplicationRepository _applicationRepository; - - private readonly IPermissionDataSeeder _permissionDataSeeder; - - private readonly IOpenIddictScopeManager _scopeManager; - private readonly IOpenIddictScopeRepository _scopeRepository; - - public ServerDataSeedContributor( - IConfiguration configuration, - ICurrentTenant currentTenant, - IOpenIddictScopeManager scopeManager, - IOpenIddictScopeRepository scopeRepository, - IPermissionDataSeeder permissionDataSeeder, - IOpenIddictApplicationManager applicationManager, - IOpenIddictApplicationRepository applicationRepository) - { - _configuration = configuration; - _currentTenant = currentTenant; - _scopeManager = scopeManager; - _scopeRepository = scopeRepository; - _permissionDataSeeder = permissionDataSeeder; - _applicationManager = applicationManager; - _applicationRepository = applicationRepository; - } - - public async Task SeedAsync(DataSeedContext context) - { - using (_currentTenant.Change(context.TenantId)) - { - await CreateScopeAsync(InitializeScopes); - - await CreateApplicationAsync(InitializeScopes); - } - } - - private async Task CreateScopeAsync(IEnumerable scopes) - { - foreach (var scope in scopes) - { - if (await _scopeRepository.FindByNameAsync(scope) == null) - { - await _scopeManager.CreateAsync(new OpenIddictScopeDescriptor() - { - Name = scope, - DisplayName = scope + " access", - DisplayNames = - { - [CultureInfo.GetCultureInfo("zh-Hans")] = "Abp API 应用程序访问", - [CultureInfo.GetCultureInfo("en")] = "Abp API Application Access" - }, - Resources = - { - scope - } - }); - } - } - } - - private async Task CreateApplicationAsync(IEnumerable scopes) - { - var configurationSection = _configuration.GetSection("OpenIddict:Applications"); - - var vueClientId = configurationSection["VueAdmin:ClientId"]; - if (!vueClientId.IsNullOrWhiteSpace()) - { - var vueClientRootUrl = configurationSection["VueAdmin:RootUrl"].EnsureEndsWith('/'); - - if (await _applicationRepository.FindByClientIdAsync(vueClientId) == null) - { - var application = new OpenIddictApplicationDescriptor - { - ClientId = vueClientId, - ClientSecret = configurationSection["VueAdmin:ClientSecret"], - ApplicationType = OpenIddictConstants.ApplicationTypes.Web, - ConsentType = OpenIddictConstants.ConsentTypes.Explicit, - DisplayName = "Abp Vue Admin Client", - PostLogoutRedirectUris = - { - new Uri(vueClientRootUrl + "signout-callback"), - new Uri(vueClientRootUrl) - }, - RedirectUris = - { - new Uri(vueClientRootUrl + "signin-callback"), - new Uri(vueClientRootUrl) - }, - Permissions = - { - OpenIddictConstants.Permissions.Endpoints.Authorization, - OpenIddictConstants.Permissions.Endpoints.Token, - OpenIddictConstants.Permissions.Endpoints.DeviceAuthorization, - OpenIddictConstants.Permissions.Endpoints.Introspection, - OpenIddictConstants.Permissions.Endpoints.Revocation, - OpenIddictConstants.Permissions.Endpoints.EndSession, - - OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, - OpenIddictConstants.Permissions.GrantTypes.Implicit, - OpenIddictConstants.Permissions.GrantTypes.Password, - OpenIddictConstants.Permissions.GrantTypes.RefreshToken, - OpenIddictConstants.Permissions.GrantTypes.DeviceCode, - OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, - - OpenIddictConstants.Permissions.ResponseTypes.Code, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeToken, - OpenIddictConstants.Permissions.ResponseTypes.IdToken, - OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.None, - OpenIddictConstants.Permissions.ResponseTypes.Token, - - OpenIddictConstants.Permissions.Scopes.Roles, - OpenIddictConstants.Permissions.Scopes.Profile, - OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, - OpenIddictConstants.Permissions.Scopes.Phone, - } - }; - foreach (var scope in scopes) - { - application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope); - } - - await _applicationManager.CreateAsync(application); - - var vueClientPermissions = new string[1] - { - "AbpIdentity.UserLookup" - }; - await _permissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, vueClientId, vueClientPermissions); - } - } - - var internalServiceClientId = configurationSection["InternalService:ClientId"]; - if (!internalServiceClientId.IsNullOrWhiteSpace()) - { - if (await _applicationRepository.FindByClientIdAsync(internalServiceClientId) == null) - { - var application = new OpenIddictApplicationDescriptor - { - ClientId = internalServiceClientId, - ClientSecret = configurationSection["InternalService:ClientSecret"], - ClientType = OpenIddictConstants.ClientTypes.Confidential, - ConsentType = OpenIddictConstants.ConsentTypes.Explicit, - ApplicationType = OpenIddictConstants.ApplicationTypes.Native, - DisplayName = "Abp Vue Admin Client", - Permissions = - { - OpenIddictConstants.Permissions.Endpoints.Authorization, - OpenIddictConstants.Permissions.Endpoints.Token, - OpenIddictConstants.Permissions.Endpoints.DeviceAuthorization, - OpenIddictConstants.Permissions.Endpoints.Introspection, - OpenIddictConstants.Permissions.Endpoints.Revocation, - OpenIddictConstants.Permissions.Endpoints.EndSession, - - OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, - OpenIddictConstants.Permissions.GrantTypes.Implicit, - OpenIddictConstants.Permissions.GrantTypes.Password, - OpenIddictConstants.Permissions.GrantTypes.RefreshToken, - OpenIddictConstants.Permissions.GrantTypes.DeviceCode, - OpenIddictConstants.Permissions.GrantTypes.ClientCredentials, - - OpenIddictConstants.Permissions.ResponseTypes.Code, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeToken, - OpenIddictConstants.Permissions.ResponseTypes.IdToken, - OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.None, - OpenIddictConstants.Permissions.ResponseTypes.Token, - - OpenIddictConstants.Permissions.Scopes.Roles, - OpenIddictConstants.Permissions.Scopes.Profile, - OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, - OpenIddictConstants.Permissions.Scopes.Phone, - } - }; - foreach (var scope in scopes) - { - application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope); - } - - await _applicationManager.CreateAsync(application); - - var internalServicePermissions = new string[2] - { - "AbpIdentity.UserLookup","AbpIdentity.Users" - }; - await _permissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, internalServiceClientId, internalServicePermissions); - } - } - - var oauthClientId = configurationSection["VueOAuthClient:ClientId"]; - if (!oauthClientId.IsNullOrWhiteSpace()) - { - var oauthClientRootUrls = configurationSection.GetSection("VueOAuthClient:RootUrls").Get>(); - - if (await _applicationRepository.FindByClientIdAsync(oauthClientId) == null) - { - var application = new OpenIddictApplicationDescriptor - { - ClientId = oauthClientId, - ClientSecret = null, - ApplicationType = OpenIddictConstants.ApplicationTypes.Web, - ConsentType = OpenIddictConstants.ConsentTypes.Implicit, - DisplayName = "OAuth Client", - PostLogoutRedirectUris = { }, - RedirectUris = { }, - Permissions = - { - OpenIddictConstants.Permissions.Endpoints.Authorization, - OpenIddictConstants.Permissions.Endpoints.Token, - OpenIddictConstants.Permissions.Endpoints.DeviceAuthorization, - OpenIddictConstants.Permissions.Endpoints.Introspection, - OpenIddictConstants.Permissions.Endpoints.Revocation, - OpenIddictConstants.Permissions.Endpoints.EndSession, - - OpenIddictConstants.Permissions.GrantTypes.AuthorizationCode, - OpenIddictConstants.Permissions.GrantTypes.RefreshToken, - - OpenIddictConstants.Permissions.ResponseTypes.Code, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeIdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.CodeToken, - OpenIddictConstants.Permissions.ResponseTypes.IdToken, - OpenIddictConstants.Permissions.ResponseTypes.IdTokenToken, - OpenIddictConstants.Permissions.ResponseTypes.None, - OpenIddictConstants.Permissions.ResponseTypes.Token, - - OpenIddictConstants.Permissions.Scopes.Roles, - OpenIddictConstants.Permissions.Scopes.Profile, - OpenIddictConstants.Permissions.Scopes.Email, - OpenIddictConstants.Permissions.Scopes.Address, - OpenIddictConstants.Permissions.Scopes.Phone, - } - }; - foreach (var scope in scopes) - { - application.Permissions.AddIfNotContains(OpenIddictConstants.Permissions.Prefixes.Scope + scope); - } - - oauthClientRootUrls.ForEach(url => - { - application.PostLogoutRedirectUris.AddIfNotContains(new Uri(url.EnsureEndsWith('/'))); - application.PostLogoutRedirectUris.AddIfNotContains(new Uri(url.EnsureEndsWith('/') + "signout-callback")); - - application.RedirectUris.AddIfNotContains(new Uri(url)); - application.RedirectUris.AddIfNotContains(new Uri(url.EnsureEndsWith('/') + "signin-callback")); - application.RedirectUris.AddIfNotContains(new Uri(url.EnsureEndsWith('/') + "swagger/oauth2-redirect.html")); - }); - - await _applicationManager.CreateAsync(application); - - var oauthClientPermissions = new string[1] - { - "AbpIdentity.UserLookup" - }; - await _permissionDataSeeder.SeedAsync(ClientPermissionValueProvider.ProviderName, oauthClientId, oauthClientPermissions); - } - } - } -} diff --git a/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeederWorker.cs deleted file mode 100644 index f1e0d6d51..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer/DataSeeder/AuthServerDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.AuthServer.DataSeeder; - -public class AuthServerDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public AuthServerDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj index d4e1211ee..294786ada 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj +++ b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj @@ -5,7 +5,7 @@ net10.0 LY.MicroService.AuthServer - Debug;Release;PostgreSQL + Debug;Release AnyCPU @@ -46,7 +46,7 @@ - + @@ -76,7 +76,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Configure.cs index 4fa1ab480..d474d21fd 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Configure.cs @@ -21,10 +21,11 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -342,25 +343,17 @@ public partial class BackendAdminHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Seeder.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Seeder.cs deleted file mode 100644 index 8d285efa6..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.BackendAdmin.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.BackendAdmin; - -public partial class BackendAdminHttpApiHostModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs index b145888fa..48a79b250 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/BackendAdminHttpApiHostModule.cs @@ -19,7 +19,7 @@ using LINGYUN.Abp.Identity.Session.AspNetCore; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Logging.Serilog.Elasticsearch; -using LINGYUN.Abp.OssManagement.SettingManagement; +using LINGYUN.Abp.BlobManagement.SettingManagement; using LINGYUN.Abp.PermissionManagement; using LINGYUN.Abp.PermissionManagement.HttpApi; using LINGYUN.Abp.PermissionManagement.OrganizationUnits; @@ -74,7 +74,7 @@ namespace LY.MicroService.BackendAdmin; typeof(AbpTencentCloudSettingManagementModule), // typeof(AbpWeChatSettingManagementModule), typeof(AbpWxPusherSettingManagementModule), - typeof(AbpOssManagementSettingManagementModule), + typeof(AbpBlobManagementSettingManagementModule), typeof(AbpSettingManagementApplicationModule), typeof(AbpSettingManagementHttpApiModule), diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/DataSeeder/BackendAdminDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/DataSeeder/BackendAdminDataSeederWorker.cs deleted file mode 100644 index 4fedd9192..000000000 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/DataSeeder/BackendAdminDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.BackendAdmin.DataSeeder; - -public class BackendAdminDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public BackendAdminDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj index 34a0ad2ff..5bb4076f2 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/LY.MicroService.BackendAdmin.HttpApi.Host.csproj @@ -5,7 +5,7 @@ net10.0 LY.MicroService.BackendAdmin - Debug;Release;PostgreSQL + Debug;Release AnyCPU @@ -82,7 +82,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/TenantHeaderParamter.cs index 1b3b7551e..9f72d5fb7 100644 --- a/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.BackendAdmin.HttpApi.Host/TenantHeaderParamter.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; -using Volo.Abp.MultiTenancy; using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; namespace LY.MicroService.BackendAdmin; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.Configure.cs index aefdb11ef..6741203c7 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.Configure.cs @@ -20,10 +20,11 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -374,25 +375,17 @@ public partial class IdentityServerHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs index b75f52138..a3de8720d 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/IdentityServerHttpApiHostModule.cs @@ -5,9 +5,10 @@ using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Emailing.Platform; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.EntityFrameworkCore; using LINGYUN.Abp.Gdpr.Identity; @@ -30,7 +31,6 @@ using Volo.Abp.AspNetCore.MultiTenancy; using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching.StackExchangeRedis; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client; using Volo.Abp.Modularity; @@ -58,7 +58,7 @@ namespace LY.MicroService.IdentityServer; typeof(LINGYUN.Abp.IdentityServer.AbpIdentityServerHttpApiModule), typeof(LINGYUN.Abp.Identity.EntityFrameworkCore.AbpIdentityEntityFrameworkCoreModule), typeof(LINGYUN.Abp.IdentityServer.EntityFrameworkCore.AbpIdentityServerEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), @@ -79,7 +79,7 @@ namespace LY.MicroService.IdentityServer; typeof(AbpAspNetCoreMvcWrapperModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpClaimsMappingModule), typeof(AbpSwashbuckleModule), typeof(AbpAutofacModule) diff --git a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj index ee9feef63..6138e15db 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/LY.MicroService.identityServer.HttpApi.Host.csproj @@ -37,7 +37,6 @@ - @@ -56,7 +55,8 @@ - + + diff --git a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/TenantHeaderParamter.cs index e00ef044b..88e617282 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.IdentityServer.HttpApi.Host/TenantHeaderParamter.cs @@ -1,9 +1,9 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; -using Volo.Abp.MultiTenancy; using Volo.Abp.AspNetCore.MultiTenancy; +using Volo.Abp.MultiTenancy; namespace LY.MicroService.IdentityServer; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.IdentityServer/DataSeeder/IdentityServerDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.IdentityServer/DataSeeder/IdentityServerDataSeederWorker.cs deleted file mode 100644 index b6dcb6f75..000000000 --- a/aspnet-core/services/LY.MicroService.IdentityServer/DataSeeder/IdentityServerDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.IdentityServer.DataSeeder; - -public class IdentityServerDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public IdentityServerDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.Seeder.cs b/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.Seeder.cs deleted file mode 100644 index 98d35920b..000000000 --- a/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.IdentityServer.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.IdentityServer; - -public partial class IdentityServerModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.cs b/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.cs index b47801bd0..e87276b80 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.cs +++ b/aspnet-core/services/LY.MicroService.IdentityServer/IdentityServerModule.cs @@ -9,7 +9,7 @@ using LINGYUN.Abp.Authentication.WeChat; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Emailing.Platform; using LINGYUN.Abp.EventBus.CAP; -using LINGYUN.Abp.Exporter.MiniExcel; +using LINGYUN.Abp.Exporter.MiniSoftware; using LINGYUN.Abp.Gdpr; using LINGYUN.Abp.Gdpr.Web; using LINGYUN.Abp.Identity.AspNetCore.Session; @@ -75,7 +75,7 @@ namespace LY.MicroService.IdentityServer; typeof(AbpAspNetCoreHttpOverridesModule), typeof(AbpTelemetryOpenTelemetryModule), typeof(AbpTelemetrySkyWalkingModule), - typeof(AbpExporterMiniExcelModule), + typeof(AbpExporterMiniSoftwareModule), typeof(AbpEmailingPlatformModule), typeof(AbpSmsPlatformModule), typeof(AbpCAPEventBusModule) @@ -113,7 +113,6 @@ public partial class IdentityServerModule : AbpModule ConfigureMvc(context.Services, configuration); ConfigureCors(context.Services, configuration); ConfigureDistributedLocking(context.Services, configuration); - ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment()); ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); } diff --git a/aspnet-core/services/LY.MicroService.IdentityServer/LY.MicroService.IdentityServer.csproj b/aspnet-core/services/LY.MicroService.IdentityServer/LY.MicroService.IdentityServer.csproj index 615ceac36..5d8439c74 100644 --- a/aspnet-core/services/LY.MicroService.IdentityServer/LY.MicroService.IdentityServer.csproj +++ b/aspnet-core/services/LY.MicroService.IdentityServer/LY.MicroService.IdentityServer.csproj @@ -46,7 +46,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/DataSeeder/LocalizationManagementDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/DataSeeder/LocalizationManagementDataSeederWorker.cs deleted file mode 100644 index 6ebe58f56..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/DataSeeder/LocalizationManagementDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.LocalizationManagement.DataSeeder; - -public class LocalizationManagementDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public LocalizationManagementDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs index 4b3b47e7f..436a7c24e 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Configure.cs @@ -18,10 +18,11 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -263,25 +264,17 @@ public partial class LocalizationManagementHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Seeder.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Seeder.cs deleted file mode 100644 index ea424b40c..000000000 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.LocalizationManagement.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.LocalizationManagement; - -public partial class LocalizationManagementHttpApiHostModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs index 0f5efbc51..42a571c24 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/LocalizationManagementHttpApiHostModule.cs @@ -102,7 +102,6 @@ public partial class LocalizationManagementHttpApiHostModule : AbpModule ConfigureCors(context.Services, configuration); ConfigureSwagger(context.Services, configuration); ConfigureDistributedLocking(context.Services, configuration); - ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment()); ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); } diff --git a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/TenantHeaderParamter.cs index 22be0f5f4..0e980ece7 100644 --- a/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.LocalizationManagement.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs similarity index 77% rename from aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs rename to aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs index 2369b3857..ae121100d 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/OssObjectTempCleanupBackgroundWorker.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/BackgroundWorkers/BlobTempCleanupBackgroundWorker.cs @@ -1,72 +1,72 @@ -using LINGYUN.Abp.OssManagement; -using LY.MicroService.PlatformManagement.MultiTenancy; -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.Logging; -using Microsoft.Extensions.Options; -using System.Threading.Tasks; -using Volo.Abp.BackgroundWorkers; -using Volo.Abp.DistributedLocking; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Threading; - -namespace LY.MicroService.PlatformManagement.BackgroundWorkers; - -public class OssObjectTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorkerBase -{ - protected ICurrentTenant CurrentTenant { get; } - protected IAbpDistributedLock DistributedLock { get; } - protected ITenantConfigurationCache TenantConfigurationCache { get; } - - public OssObjectTempCleanupBackgroundWorker( - AbpAsyncTimer timer, - IServiceScopeFactory serviceScopeFactory, - IOptionsMonitor cleanupOptions, - IAbpDistributedLock distributedLock, - ICurrentTenant currentTenant, - ITenantConfigurationCache tenantConfigurationCache) - : base(timer, serviceScopeFactory) - { - CurrentTenant = currentTenant; - DistributedLock = distributedLock; - TenantConfigurationCache = tenantConfigurationCache; - timer.Period = cleanupOptions.CurrentValue.CleanupPeriod; - } - - protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) - { - await using var handle = await DistributedLock.TryAcquireAsync(nameof(OssObjectTempCleanupBackgroundWorker)); - - Logger.LogInformation($"Lock is acquired for {nameof(OssObjectTempCleanupBackgroundWorker)}"); - - if (handle != null) - { - using (CurrentTenant.Change(null)) - { - await ExecuteCleanService(workerContext); - - var allActiveTenants = await TenantConfigurationCache.GetTenantsAsync(); - - foreach (var activeTenant in allActiveTenants) - { - using (CurrentTenant.Change(activeTenant.Id, activeTenant.Name)) - { - await ExecuteCleanService(workerContext); - } - } - } - - Logger.LogInformation($"Lock is released for {nameof(OssObjectTempCleanupBackgroundWorker)}"); - return; - } - - Logger.LogInformation($"Handle is null because of the locking for : {nameof(OssObjectTempCleanupBackgroundWorker)}"); - } - - private async static Task ExecuteCleanService(PeriodicBackgroundWorkerContext workerContext) - { - await workerContext - .ServiceProvider - .GetRequiredService() - .CleanAsync(); - } -} +using LINGYUN.Abp.BlobManagement; +using LY.MicroService.PlatformManagement.MultiTenancy; +using Microsoft.Extensions.DependencyInjection; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Options; +using System.Threading.Tasks; +using Volo.Abp.BackgroundWorkers; +using Volo.Abp.DistributedLocking; +using Volo.Abp.MultiTenancy; +using Volo.Abp.Threading; + +namespace LY.MicroService.PlatformManagement.BackgroundWorkers; + +public class BlobTempCleanupBackgroundWorker : AsyncPeriodicBackgroundWorkerBase +{ + protected ICurrentTenant CurrentTenant { get; } + protected IAbpDistributedLock DistributedLock { get; } + protected ITenantConfigurationCache TenantConfigurationCache { get; } + + public BlobTempCleanupBackgroundWorker( + AbpAsyncTimer timer, + IServiceScopeFactory serviceScopeFactory, + IOptionsMonitor cleanupOptions, + IAbpDistributedLock distributedLock, + ICurrentTenant currentTenant, + ITenantConfigurationCache tenantConfigurationCache) + : base(timer, serviceScopeFactory) + { + CurrentTenant = currentTenant; + DistributedLock = distributedLock; + TenantConfigurationCache = tenantConfigurationCache; + timer.Period = cleanupOptions.CurrentValue.CleanupPeriod; + } + + protected async override Task DoWorkAsync(PeriodicBackgroundWorkerContext workerContext) + { + await using var handle = await DistributedLock.TryAcquireAsync(nameof(BlobTempCleanupBackgroundWorker)); + + Logger.LogInformation($"Lock is acquired for {nameof(BlobTempCleanupBackgroundWorker)}"); + + if (handle != null) + { + using (CurrentTenant.Change(null)) + { + await ExecuteCleanService(workerContext); + + var allActiveTenants = await TenantConfigurationCache.GetTenantsAsync(); + + foreach (var activeTenant in allActiveTenants) + { + using (CurrentTenant.Change(activeTenant.Id, activeTenant.Name)) + { + await ExecuteCleanService(workerContext); + } + } + } + + Logger.LogInformation($"Lock is released for {nameof(BlobTempCleanupBackgroundWorker)}"); + return; + } + + Logger.LogInformation($"Handle is null because of the locking for : {nameof(BlobTempCleanupBackgroundWorker)}"); + } + + private async static Task ExecuteCleanService(PeriodicBackgroundWorkerContext workerContext) + { + await workerContext + .ServiceProvider + .GetRequiredService() + .CleanAsync(); + } +} diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/DataSeeder/PlatformManagementDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/DataSeeder/PlatformManagementDataSeederWorker.cs deleted file mode 100644 index 35b53f1f9..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/DataSeeder/PlatformManagementDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.PlatformManagement.DataSeeder; - -public class PlatformManagementDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public PlatformManagementDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Handlers/PrivateBlobProtecteder.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Handlers/PrivateBlobProtecteder.cs new file mode 100644 index 000000000..d19a185e7 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Handlers/PrivateBlobProtecteder.cs @@ -0,0 +1,79 @@ +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Permissions; +using System; +using System.Threading.Tasks; +using Volo.Abp.DependencyInjection; +using Volo.Abp.Domain.Entities.Events; +using Volo.Abp.EventBus; +using Volo.Abp.PermissionManagement; +using Volo.Abp.Users; + +namespace LY.MicroService.PlatformManagement.Handlers; + +public class PrivateBlobProtecteder : + ILocalEventHandler>, + ILocalEventHandler>, + ITransientDependency +{ + private readonly IResourcePermissionManager _resourcePermissionManager; + private readonly IBlobContainerRepository _blobContainerRepository; + private readonly ICurrentUser _currentUser; + + public PrivateBlobProtecteder( + IResourcePermissionManager resourcePermissionManager, + IBlobContainerRepository blobContainerRepository, + ICurrentUser currentUser) + { + _resourcePermissionManager = resourcePermissionManager; + _blobContainerRepository = blobContainerRepository; + _currentUser = currentUser; + } + + public async virtual Task HandleEventAsync(EntityCreatedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, true); + } + } + + public async virtual Task HandleEventAsync(EntityDeletedEventData eventData) + { + if (await ShouldSetResourcePermissions(eventData.Entity)) + { + await SetResourcePermissions(eventData.Entity, false); + } + } + + protected async virtual Task ShouldSetResourcePermissions(Blob blob) + { + if (!_currentUser.IsAuthenticated) + { + return false; + } + var blobContainer = await _blobContainerRepository.GetAsync(blob.ContainerId); + if (!string.Equals("users", blobContainer.Name, StringComparison.InvariantCultureIgnoreCase)) + { + return false; + } + + return true; + } + + protected async virtual Task SetResourcePermissions(Blob blob, bool isGranted) + { + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.Delete, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + await _resourcePermissionManager.SetForUserAsync( + userId: _currentUser.Id!.Value, + name: BlobManagementPermissionNames.Blob.Resources.View, + resourceName: BlobManagementPermissionNames.Blob.Resources.Name, + resourceKey: blob.Id.ToString(), + isGranted: isGranted); + } +} + diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj index 06cb7b0b3..c315e4163 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/LY.MicroService.PlatformManagement.HttpApi.Host.csproj @@ -37,6 +37,7 @@ + @@ -64,15 +65,14 @@ - - - - - - - - - + + + + + + + + diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Packages/PackageBlobOssManager.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Packages/PackageBlobOssManager.cs deleted file mode 100644 index 5f256851b..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/Packages/PackageBlobOssManager.cs +++ /dev/null @@ -1,98 +0,0 @@ -using LINGYUN.Abp.OssManagement; -using LINGYUN.Platform.Packages; -using System; -using System.IO; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.BlobStoring; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; - -namespace LY.MicroService.PlatformManagement.Packages; - -/// -/// 使用Oss模块管理包二进制文件 -/// -[Dependency(ReplaceServices = true)] -[ExposeServices( - typeof(IPackageBlobManager), - typeof(PackageBlobManager), - typeof(PackageBlobOssManager))] -public class PackageBlobOssManager : PackageBlobManager, ITransientDependency -{ - protected IOssContainerFactory OssContainerFactory { get; } - - public PackageBlobOssManager( - IPackageBlobNormalizer blobNormalizer, - IBlobContainer packageContainer, - IOssContainerFactory ossContainerFactory) - : base(blobNormalizer, packageContainer) - { - OssContainerFactory = ossContainerFactory; - } - - public async override Task RemoveBlobAsync( - Package package, - PackageBlob packageBlob, - CancellationToken cancellationToken = default) - { - var blobName = BlobNormalizer.Normalize(package, packageBlob); - var bucket = BlobContainerNameAttribute.GetContainerName(); - var path = blobName.Replace(packageBlob.Name, ""); - path.RemovePostFix(Path.PathSeparator.ToString()); - - var oss = OssContainerFactory.Create(); - - await oss.DeleteObjectAsync(bucket, packageBlob.Name, path); - } - - protected async override Task DownloadFromBlobAsync( - Package package, - PackageBlob packageBlob, - CancellationToken cancellationToken = default) - { - var blobName = BlobNormalizer.Normalize(package, packageBlob); - var bucket = BlobContainerNameAttribute.GetContainerName(); - var path = blobName.Replace(packageBlob.Name, ""); - path.RemovePostFix(Path.PathSeparator.ToString()); - - var oss = OssContainerFactory.Create(); - - var ossObject = await oss.GetObjectAsync(bucket, packageBlob.Name, path); - - return ossObject.Content; - } - - public async override Task SaveBlobAsync( - Package package, - PackageBlob packageBlob, - Stream stream, - bool overrideExisting = true, - CancellationToken cancellationToken = default) - { - var blobName = BlobNormalizer.Normalize(package, packageBlob); - var bucket = BlobContainerNameAttribute.GetContainerName(); - var path = blobName.Replace(packageBlob.Name, ""); - - var request = new CreateOssObjectRequest( - bucket, - packageBlob.Name, - stream, - path) - { - Overwrite = overrideExisting - }; - - var oss = OssContainerFactory.Create(); - var ossObject = await oss.CreateObjectAsync(request); - - if (!ossObject.MD5.IsNullOrWhiteSpace()) - { - packageBlob.SetProperty("md5", ossObject.MD5); - } - - stream.Seek(0, SeekOrigin.Begin); - packageBlob.SHA256 = ComputeHash(stream); - packageBlob.SetUrl($"api/platform/packages/{packageBlob.PackageId}/blob/{packageBlob.Name}"); - } -} diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Configure.cs index 9c9defcbc..a748ec4e3 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Configure.cs @@ -22,7 +22,7 @@ using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection.Extensions; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using StackExchange.Redis; using System; using System.Collections.Generic; @@ -35,8 +35,6 @@ using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Auditing; using Volo.Abp.BlobStoring; -using Volo.Abp.BlobStoring.FileSystem; -using Volo.Abp.BlobStoring.Minio; using Volo.Abp.Caching; using Volo.Abp.FeatureManagement; using Volo.Abp.GlobalFeatures; @@ -305,25 +303,17 @@ public partial class PlatformManagementHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Seeder.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Seeder.cs deleted file mode 100644 index b33a3b4fb..000000000 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.PlatformManagement.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.PlatformManagement; - -public partial class PlatformManagementHttpApiHostModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs index 8e44f97c8..adf3a9fdb 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/PlatformManagementHttpApiHostModule.cs @@ -3,6 +3,13 @@ using LINGYUN.Abp.AspNetCore.Mvc.Localization; using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; +using LINGYUN.Abp.BlobManagement; +using LINGYUN.Abp.BlobManagement.Aliyun; +using LINGYUN.Abp.BlobManagement.FileSystem; +using LINGYUN.Abp.BlobManagement.Minio; +using LINGYUN.Abp.BlobManagement.SettingManagement; +using LINGYUN.Abp.BlobManagement.Tencent; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.EventBus.CAP; @@ -12,14 +19,6 @@ using LINGYUN.Abp.Identity.Session.AspNetCore; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; using LINGYUN.Abp.Notifications; -using LINGYUN.Abp.OssManagement; -using LINGYUN.Abp.OssManagement.Aliyun; -using LINGYUN.Abp.OssManagement.FileSystem; -using LINGYUN.Abp.OssManagement.Imaging; -using LINGYUN.Abp.OssManagement.Minio; -using LINGYUN.Abp.OssManagement.Nexus; -using LINGYUN.Abp.OssManagement.SettingManagement; -using LINGYUN.Abp.OssManagement.Tencent; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; @@ -55,9 +54,9 @@ using Volo.Abp.Imaging; using Volo.Abp.MailKit; using Volo.Abp.Modularity; using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.Identity; using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; -using Volo.Abp.Threading; namespace LY.MicroService.PlatformManagement; @@ -70,15 +69,14 @@ namespace LY.MicroService.PlatformManagement; typeof(AbpAspNetCoreMvcLocalizationModule), typeof(AbpUINavigationVueVbenAdmin5Module), typeof(PlatformThemeVueVbenAdminModule), - typeof(AbpOssManagementAliyunModule), // 阿里云存储提供者模块 - typeof(AbpOssManagementTencentModule), // 腾讯云存储提供者模块 - typeof(AbpOssManagementNexusModule), // Nexus存储提供者模块 - typeof(AbpOssManagementMinioModule), // Minio存储提供者模块 - typeof(AbpOssManagementFileSystemModule),// 本地文件系统提供者模块 - typeof(AbpOssManagementImagingModule), // 对象存储图形处理模块 - typeof(AbpOssManagementApplicationModule), - typeof(AbpOssManagementHttpApiModule), - typeof(AbpOssManagementSettingManagementModule), + typeof(AbpBlobManagementAliyunModule), // 阿里云存储提供者模块 + typeof(AbpBlobManagementTencentModule), // 腾讯云存储提供者模块 + typeof(AbpBlobManagementMinioModule), // Minio存储提供者模块 + typeof(AbpBlobManagementFileSystemModule),// 本地文件系统提供者模块 + typeof(AbpBlobManagementApplicationModule), + typeof(AbpBlobManagementHttpApiModule), + typeof(AbpBlobManagementSettingManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpImagingImageSharpModule), typeof(PlatformApplicationModule), typeof(PlatformHttpApiModule), @@ -88,6 +86,7 @@ namespace LY.MicroService.PlatformManagement; typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpSaasEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpLocalizationManagementEntityFrameworkCoreModule), typeof(PlatformMigrationsEntityFrameworkCoreModule), @@ -148,26 +147,24 @@ public partial class PlatformManagementHttpApiHostModule : AbpModule ConfigureCors(context.Services, configuration); ConfigureSwagger(context.Services, configuration); ConfigureDistributedLocking(context.Services, configuration); - ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment()); ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); ConfigurePlatformModule(context.Services); } - public override void OnPostApplicationInitialization(ApplicationInitializationContext context) - { - AsyncHelper.RunSync(() => OnPostApplicationInitializationAsync(context)); - } - public async override Task OnPostApplicationInitializationAsync(ApplicationInitializationContext context) { - var options = context.ServiceProvider.GetRequiredService>().Value; + var options = context.ServiceProvider.GetRequiredService>().Value; if (options.IsCleanupEnabled) { await context.ServiceProvider .GetRequiredService() - .AddAsync(context.ServiceProvider.GetRequiredService()); + .AddAsync(context.ServiceProvider.GetRequiredService()); } + + await context.ServiceProvider + .GetRequiredService() + .SeedAsync(); } public override void OnApplicationInitialization(ApplicationInitializationContext context) diff --git a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/TenantHeaderParamter.cs index 33ba350d1..9896004b2 100644 --- a/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.PlatformManagement.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ namespace LY.MicroService.PlatformManagement { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/DataSeeder/RealtimeMessageDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/DataSeeder/RealtimeMessageDataSeederWorker.cs deleted file mode 100644 index 02d78a1de..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/DataSeeder/RealtimeMessageDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.RealtimeMessage.DataSeeder; - -public class RealtimeMessageDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public RealtimeMessageDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Configure.cs index cb2d04d70..f8dfe25db 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Configure.cs @@ -23,11 +23,12 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -362,25 +363,17 @@ public partial class RealtimeMessageHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Seeder.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Seeder.cs deleted file mode 100644 index 721b01397..000000000 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.Seeder.cs +++ /dev/null @@ -1,15 +0,0 @@ -using LY.MicroService.RealtimeMessage.DataSeeder; -using Microsoft.Extensions.DependencyInjection; - -namespace LY.MicroService.RealtimeMessage; - -public partial class RealtimeMessageHttpApiHostModule -{ - private static void ConfigureSeedWorker(IServiceCollection services, bool isDevelopment = false) - { - if (isDevelopment) - { - services.AddHostedService(); - } - } -} diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs index 9e4ffc039..ca465dfb5 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/RealtimeMessageHttpApiHostModule.cs @@ -168,7 +168,6 @@ public partial class RealtimeMessageHttpApiHostModule : AbpModule ConfigureCors(context.Services, configuration); ConfigureSwagger(context.Services, configuration); ConfigureDistributedLocking(context.Services, configuration); - ConfigureSeedWorker(context.Services, hostingEnvironment.IsDevelopment()); ConfigureSecurity(context.Services, configuration, hostingEnvironment.IsDevelopment()); } diff --git a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/TenantHeaderParamter.cs index 0639ac2eb..83cda332e 100644 --- a/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.RealtimeMessage.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj index 1deadfe40..ba7335c3b 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/LY.MicroService.TaskManagement.HttpApi.Host.csproj @@ -58,7 +58,7 @@ - + diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs index 3b17bd089..9321cc5fd 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.Configure.cs @@ -1,5 +1,6 @@ using DotNetCore.CAP; using LINGYUN.Abp.BackgroundTasks; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Localization.CultureMap; @@ -19,17 +20,19 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; using Volo.Abp.Auditing; +using Volo.Abp.BlobStoring; using Volo.Abp.Caching; using Volo.Abp.FeatureManagement; using Volo.Abp.GlobalFeatures; @@ -287,6 +290,22 @@ public partial class TaskManagementHttpApiHostModule }); } + private void ConfigureBlobStoring(IConfiguration configuration) + { + Configure(options => + { + // all container use oss management + options.Containers.ConfigureAll((containerName, containerConfiguration) => + { + // use oss management + containerConfiguration.UseBlobManagement(config => + { + config.ContainerName = configuration[BlobManagementBlobProviderConfigurationNames.ContainerName] ?? "tasks"; + }); + }); + }); + } + private void ConfigureMultiTenancy(IConfiguration configuration) { // 多租户 @@ -346,25 +365,16 @@ public partial class TaskManagementHttpApiHostModule }); options.DocInclusionPredicate((docName, description) => true); options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) { - { - new OpenApiSecurityScheme - { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } - } - }); + options.IncludeXmlComments(xmlDocFile); + } options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs index 27d5bb81c..1344f0cf4 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TaskManagementHttpApiHostModule.cs @@ -15,7 +15,7 @@ using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Localization.CultureMap; using LINGYUN.Abp.LocalizationManagement.EntityFrameworkCore; -using LINGYUN.Abp.OssManagement; +using LINGYUN.Abp.BlobManagement; using LINGYUN.Abp.Saas.EntityFrameworkCore; using LINGYUN.Abp.Serilog.Enrichers.Application; using LINGYUN.Abp.Serilog.Enrichers.UniqueId; @@ -55,7 +55,7 @@ namespace LY.MicroService.TaskManagement; typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAuthorizationOrganizationUnitsModule), typeof(AbpEmailingExceptionHandlingModule), - typeof(AbpOssManagementHttpApiClientModule), + typeof(AbpBlobManagementHttpApiClientModule), typeof(AbpHttpClientIdentityModelWebModule), typeof(AbpAspNetCoreMultiTenancyModule), typeof(AbpAspNetCoreMvcLocalizationModule), @@ -117,6 +117,7 @@ public partial class TaskManagementHttpApiHostModule : AbpModule ConfigureCaching(configuration); ConfigureAuditing(configuration); ConfigureIdentity(configuration); + ConfigureBlobStoring(configuration); ConfigureMultiTenancy(configuration); ConfigureJsonSerializer(configuration); ConfigureMvc(context.Services, configuration); diff --git a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TenantHeaderParamter.cs index a586508ba..62118236f 100644 --- a/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.TaskManagement.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj index 49bfd0ea0..53f42f7e3 100644 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/LY.MicroService.WechatManagement.HttpApi.Host.csproj @@ -31,7 +31,6 @@ - @@ -45,6 +44,7 @@ + diff --git a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs index 280fa5e41..0fae7af68 100644 --- a/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WechatManagement.HttpApi.Host/WechatManagementHttpApiHostModule.cs @@ -4,6 +4,7 @@ using LINGYUN.Abp.AspNetCore.Mvc.Wrapper; using LINGYUN.Abp.AuditLogging.Elasticsearch; using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.Claims.Mapping; +using LINGYUN.Abp.EntityFrameworkCore.MySQL; using LINGYUN.Abp.EventBus.CAP; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Http.Client.Wrapper; @@ -33,7 +34,6 @@ using Volo.Abp.AspNetCore.Serilog; using Volo.Abp.Autofac; using Volo.Abp.Caching.StackExchangeRedis; using Volo.Abp.DistributedLocking; -using Volo.Abp.EntityFrameworkCore.MySQL; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Http.Client.IdentityModel.Web; using Volo.Abp.Identity.EntityFrameworkCore; @@ -67,7 +67,7 @@ namespace LY.MicroService.WechatManagement; typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpSettingManagementEntityFrameworkCoreModule), typeof(AbpLocalizationManagementEntityFrameworkCoreModule), - typeof(AbpEntityFrameworkCoreMySQLPomeloModule), + typeof(AbpEntityFrameworkCoreMySQLMicrotingModule), typeof(AbpAspNetCoreAuthenticationJwtBearerModule), typeof(AbpAuthorizationOrganizationUnitsModule), typeof(AbpEmailingExceptionHandlingModule), diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/DataSeeder/WorkflowManagementDataSeederWorker.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/DataSeeder/WorkflowManagementDataSeederWorker.cs deleted file mode 100644 index e54ffe593..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/DataSeeder/WorkflowManagementDataSeederWorker.cs +++ /dev/null @@ -1,21 +0,0 @@ -using Microsoft.Extensions.Hosting; -using System.Threading; -using System.Threading.Tasks; -using Volo.Abp.Data; - -namespace LY.MicroService.WorkflowManagement.DataSeeder; - -public class WorkflowManagementDataSeederWorker : BackgroundService -{ - protected IDataSeeder DataSeeder { get; } - - public WorkflowManagementDataSeederWorker(IDataSeeder dataSeeder) - { - DataSeeder = dataSeeder; - } - - protected async override Task ExecuteAsync(CancellationToken stoppingToken) - { - await DataSeeder.SeedAsync(); - } -} diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/EventBus/Handlers/TenantSynchronizer.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/EventBus/Handlers/TenantSynchronizer.cs deleted file mode 100644 index bc3922b29..000000000 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/EventBus/Handlers/TenantSynchronizer.cs +++ /dev/null @@ -1,66 +0,0 @@ -using LINGYUN.Abp.Data.DbMigrator; -using Microsoft.Extensions.Logging; -using System.Threading.Tasks; -using Volo.Abp.Data; -using Volo.Abp.DependencyInjection; -using Volo.Abp.EventBus.Distributed; -using Volo.Abp.MultiTenancy; -using Volo.Abp.Uow; - -namespace LY.MicroService.WorkflowManagement.EventBus.Handlers; - -public class TenantSynchronizer : - IDistributedEventHandler, - ITransientDependency -{ - protected IDataSeeder DataSeeder { get; } - protected ICurrentTenant CurrentTenant { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected IUnitOfWorkManager UnitOfWorkManager { get; } - - protected ILogger Logger { get; } - - public TenantSynchronizer( - IDataSeeder dataSeeder, - ICurrentTenant currentTenant, - IDbSchemaMigrator dbSchemaMigrator, - IUnitOfWorkManager unitOfWorkManager, - ILogger logger) - { - DataSeeder = dataSeeder; - CurrentTenant = currentTenant; - DbSchemaMigrator = dbSchemaMigrator; - UnitOfWorkManager = unitOfWorkManager; - - Logger = logger; - } - - /// - /// 租户创建之后需要预置种子数据 - /// - /// - /// - public async virtual Task HandleEventAsync(TenantCreatedEto eventData) - { - using (var unitOfWork = UnitOfWorkManager.Begin()) - { - using (CurrentTenant.Change(eventData.Id, eventData.Name)) - { - Logger.LogInformation("Migrating the new tenant database with WorkflowManagement..."); - // 迁移租户数据 - //await DbSchemaMigrator.MigrateAsync( - // (connectionString, builder) => - // { - // builder.UseMySql(connectionString, ServerVersion.AutoDetect(connectionString)); - - // return new WorkflowManagementDbContext(builder.Options); - // }); - Logger.LogInformation("Migrated the new tenant database with WorkflowManagement..."); - - await DataSeeder.SeedAsync(new DataSeedContext(eventData.Id)); - - await unitOfWork.SaveChangesAsync(); - } - } - } -} diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj index 4e4c18db4..a256d4235 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/LY.MicroService.WorkflowManagement.HttpApi.Host.csproj @@ -64,6 +64,7 @@ + @@ -72,7 +73,6 @@ - diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/TenantHeaderParamter.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/TenantHeaderParamter.cs index 2bfb1142b..4ac347a33 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/TenantHeaderParamter.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/TenantHeaderParamter.cs @@ -1,5 +1,5 @@ using Microsoft.Extensions.Options; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Swashbuckle.AspNetCore.SwaggerGen; using System.Collections.Generic; using Volo.Abp.AspNetCore.MultiTenancy; @@ -23,7 +23,7 @@ public class TenantHeaderParamter : IOperationFilter { if (_multiTenancyOptions.IsEnabled) { - operation.Parameters = operation.Parameters ?? new List(); + operation.Parameters = operation.Parameters ?? new List(); operation.Parameters.Add(new OpenApiParameter { Name = _aspNetCoreMultiTenancyOptions.TenantKey, diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs index 8b2b8df80..da55c330e 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.Configure.cs @@ -3,7 +3,6 @@ using Elsa; using Elsa.Options; using Elsa.Rebus.RabbitMq; using LINGYUN.Abp.BackgroundTasks; -using LINGYUN.Abp.BlobStoring.OssManagement; using LINGYUN.Abp.ExceptionHandling; using LINGYUN.Abp.ExceptionHandling.Emailing; using LINGYUN.Abp.Localization.CultureMap; @@ -23,11 +22,13 @@ using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; using Microsoft.IdentityModel.Logging; using Microsoft.IdentityModel.Tokens; -using Microsoft.OpenApi.Models; +using Microsoft.OpenApi; using Quartz; using StackExchange.Redis; +using Swashbuckle.AspNetCore.SwaggerGen; using System; using System.Collections.Generic; +using System.IO; using System.Linq; using System.Text.Encodings.Web; using System.Text.Unicode; @@ -222,20 +223,6 @@ public partial class WorkflowManagementHttpApiHostModule Configure(options => { preActions.Configure(options); - //options.Containers.Configure((containerConfiguration) => - //{ - // containerConfiguration.UseOssManagement(config => - // { - // config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket] ?? "workflow"; - // }); - //}); - options.Containers.ConfigureAll((_, containerConfiguration) => - { - containerConfiguration.UseOssManagement(config => - { - config.Bucket = configuration[OssManagementBlobProviderConfigurationNames.Bucket] ?? "workflow"; - }); - }); }); } @@ -247,7 +234,7 @@ public partial class WorkflowManagementHttpApiHostModule options.UseMySQL(mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } @@ -415,27 +402,32 @@ public partial class WorkflowManagementHttpApiHostModule Url = new Uri("https://github.com/colinin/abp-next-admin/blob/master/LICENSE") } }); - options.DocInclusionPredicate((docName, description) => true); - options.CustomSchemaIds(type => type.FullName); - options.AddSecurityDefinition("Bearer", new OpenApiSecurityScheme - { - Description = "JWT Authorization header using the Bearer scheme. Example: \"Authorization: Bearer {token}\"", - Name = "Authorization", - In = ParameterLocation.Header, - Scheme = "bearer", - Type = SecuritySchemeType.Http, - BearerFormat = "JWT" - }); - options.AddSecurityRequirement(new OpenApiSecurityRequirement + options.DocInclusionPredicate((docName, description) => { + if (description.TryGetMethodInfo(out var methodInfo)) { - new OpenApiSecurityScheme + var controllerNamespace = methodInfo.DeclaringType?.Namespace; + if (controllerNamespace?.StartsWith("Elsa") == true) { - Reference = new OpenApiReference { Type = ReferenceType.SecurityScheme, Id = "Bearer" } - }, - new string[] { } + // TODO: Elsa 2.x 使用 Swashbuckle 6.x版本不兼容, 忽略Swagger文档 + return false; + } } + + return true; }); + options.CustomSchemaIds(type => type.FullName); + options.DescribeAllParametersInCamelCase(); + + var xmlDocFiles = new List(); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "LINGYUN.Abp.*.xml")); + xmlDocFiles.AddIfNotContains(Directory.GetFiles(AppContext.BaseDirectory, "Volo.Abp.*.xml")); + + foreach (var xmlDocFile in xmlDocFiles) + { + options.IncludeXmlComments(xmlDocFile); + } + options.OperationFilter(); }); } diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs index 5f9e0a95d..2b5255be1 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.cs @@ -6,7 +6,7 @@ using LINGYUN.Abp.Authorization.OrganizationUnits; using LINGYUN.Abp.BackgroundTasks.DistributedLocking; using LINGYUN.Abp.BackgroundTasks.ExceptionHandling; using LINGYUN.Abp.BackgroundTasks.Quartz; -using LINGYUN.Abp.BlobStoring.OssManagement; +using LINGYUN.Abp.BlobStoring.BlobManagement; using LINGYUN.Abp.Claims.Mapping; using LINGYUN.Abp.Data.DbMigrator; using LINGYUN.Abp.Elsa; @@ -54,7 +54,7 @@ namespace LY.MicroService.WorkflowManagement; typeof(AbpSerilogEnrichersUniqueIdModule), typeof(AbpAuditLoggingElasticsearchModule), typeof(AbpAspNetCoreSerilogModule), - typeof(AbpBlobStoringOssManagementModule), + typeof(AbpBlobStoringBlobManagementModule), typeof(AbpElsaModule), typeof(AbpElsaServerModule), typeof(AbpElsaActivitiesModule), diff --git a/aspnet-core/services/LY.MicroService.WorkflowManagement.Next.HttpApi.Host/LY.MicroService.WorkflowManagement.Next.HttpApi.Host.csproj b/aspnet-core/services/LY.MicroService.WorkflowManagement.Next.HttpApi.Host/LY.MicroService.WorkflowManagement.Next.HttpApi.Host.csproj index 80dddcc9b..ee05899c0 100644 --- a/aspnet-core/services/LY.MicroService.WorkflowManagement.Next.HttpApi.Host/LY.MicroService.WorkflowManagement.Next.HttpApi.Host.csproj +++ b/aspnet-core/services/LY.MicroService.WorkflowManagement.Next.HttpApi.Host/LY.MicroService.WorkflowManagement.Next.HttpApi.Host.csproj @@ -43,8 +43,8 @@ - - + + diff --git a/common.props b/common.props index 39f7416ba..7e22f9901 100644 --- a/common.props +++ b/common.props @@ -1,12 +1,12 @@ latest - 10.0.2 + 10.2.0 colin $(NoWarn);CS1591;CS0436;CS8618;NU1803 https://github.com/colinin/abp-next-admin $(SolutionDir)LocalNuget - 10.0.2 + 10.2.0 MIT git https://github.com/colinin/abp-next-admin From 23119a028999849522510384d95031964cca2fd6 Mon Sep 17 00:00:00 2001 From: colin Date: Thu, 23 Apr 2026 19:29:05 +0800 Subject: [PATCH 02/12] feat: Change the database migration list --- .changes/Migration 10.0.2 - 10.2.0.md | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/.changes/Migration 10.0.2 - 10.2.0.md b/.changes/Migration 10.0.2 - 10.2.0.md index 6d05ca4f8..3699007b9 100644 --- a/.changes/Migration 10.0.2 - 10.2.0.md +++ b/.changes/Migration 10.0.2 - 10.2.0.md @@ -60,8 +60,18 @@ ## 数据库迁移 -| Product | Scripts | ProductVersion | -| ------------------------------------------ | --------- | ------ | -| AdminService | 20260403034826_Upgrade-Abp-Framework-To-10-2-0 | 10.2.0 | -| Elsa2 | 2.16.0 | 2.16.1 | -| Elsa3 | 3.3.5 | 3.6.0 | \ No newline at end of file +| Project Name | Database Provider | Scripts | EF Core Version | +| ------------------------ | ----------------- | ---------------------------------------------- | --------------- | +| aspire/AdminService | PostgreSQL | 20260403034826_Upgrade-Abp-Framework-To-10-2-0 | 10.0.2 | +| aspire/AuthServer | PostgreSQL | 20260402040021_Upgrade-Abp-Framework-To-10-2-0 | 10.0.2 | +| aspire/PlatformService | PostgreSQL | 20260411023117_Add-Blob-Management-Module | 10.0.2 | +| services/Single | MySQL | 20260421022905_Upgrade-Abp-Framework-To-10-2-0 | 10.0.3 | +| services/Single | PostgreSQL | 20260403035350_Upgrade-Abp-Framework-To-10-2-0 | 10.0.2 | +| services/Single | PostgreSQL | 20260421023019_Add-Blob-Management-Module | 10.0.2 | +| services/Single | SqlServer | 20260403035440_Upgrade-Abp-Framework-To-10-2-0 | 10.0.2 | +| services/Single | SqlServer | 20260421023044_Add-Blob-Management-Module | 10.0.2 | +| services/AuthServer | MySQL | 20260420064613_Upgrade-Abp-Framework-To-10-0-2 | 10.0.3 | +| services/BackendAdmin | MySQL | 20260420064540_Upgrade-Abp-Framework-To-10-0-2 | 10.0.3 | +| services/IdentityServer | MySQL | 20260420065028_Upgrade-Abp-Framework-To-10-0-2 | 10.0.3 | +| services/RealtimeMessage | MySQL | 20260420065252_Upgrade-Abp-Framework-To-10-0-2 | 10.0.3 | +| services/TaskManagement | MySQL | 20260420073543_Upgrade-Abp-Framework-To-10-0-2 | 10.0.3 | \ No newline at end of file From 47b1ee677b2b74cf8ccf599c57c60750e2da006d Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 24 Apr 2026 16:51:23 +0800 Subject: [PATCH 03/12] fix: fixed `select_account` Incorrect callback path --- .../Pages/Account/SelectAccount.cshtml.cs | 52 +++++++++++++++---- 1 file changed, 42 insertions(+), 10 deletions(-) diff --git a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/SelectAccount.cshtml.cs b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/SelectAccount.cshtml.cs index 4ec3a00ac..43a8490cd 100644 --- a/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/SelectAccount.cshtml.cs +++ b/aspnet-core/modules/account/LINGYUN.Abp.Account.Web.OpenIddict/Pages/Account/SelectAccount.cshtml.cs @@ -25,6 +25,7 @@ public class SelectAccountModel : AccountPageModel private const string LastLoginTimeFieldName = "LastLoginTime"; private const string AllowedTenantsFieldName = "AllowedTenants"; public const string DefaultDateFormat = "yyyy-MM-dd HH:mm:ss"; + private OriginalRequestInfo _originalRequest; [BindProperty(SupportsGet = true)] public string RedirectUri { get; set; } @@ -62,8 +63,8 @@ public class SelectAccountModel : AccountPageModel }); } - var requestInfo = await ParseOriginalRequestFromRedirectUriAsync(); - if (requestInfo == null) + _originalRequest = await ParseOriginalRequestFromRedirectUriAsync(); + if (_originalRequest == null) { Alerts.Warning(L["InvalidSelectAccountRequest"]); return Page(); @@ -71,12 +72,12 @@ public class SelectAccountModel : AccountPageModel Input = new SelectAccountInput { - RedirectUri = requestInfo.RedirectUri, - ClientId = requestInfo.ClientId, + RedirectUri = _originalRequest.RedirectUri, + ClientId = _originalRequest.ClientId, }; - var application = await ApplicationManager.FindByClientIdAsync(requestInfo.ClientId); - ClientName = await ApplicationManager.GetLocalizedDisplayNameAsync(application) ?? requestInfo.ClientId; + var application = await ApplicationManager.FindByClientIdAsync(_originalRequest.ClientId); + ClientName = await ApplicationManager.GetLocalizedDisplayNameAsync(application) ?? _originalRequest.ClientId; var currentUser = await UserManager.GetUserAsync(User); if (currentUser == null) @@ -84,13 +85,13 @@ public class SelectAccountModel : AccountPageModel await SignInManager.SignOutAsync(); return RedirectToPage("/Account/Login", new { - ReturnUrl = requestInfo.RedirectUri + ReturnUrl = _originalRequest.RedirectUri }); } UserName = currentUser.UserName; - AvailableAccounts = await DiscoverUserAccountsAsync(currentUser, requestInfo.ClientId); + AvailableAccounts = await DiscoverUserAccountsAsync(currentUser, _originalRequest.ClientId); if (AvailableAccounts.Count == 0) { @@ -182,9 +183,40 @@ public class SelectAccountModel : AccountPageModel // Clear the dynamic claims cache. await IdentityDynamicClaimsPrincipalContributorCache.ClearAsync(user.Id, user.TenantId); } - + // Öض¨Ïò»ØԭʼÊÚȨÇëÇó - return await RedirectSafelyAsync(Input.RedirectUri); + var originalAuthorizeUrl = await ReconstructOriginalAuthorizeUrlAsync(); + + return Redirect(originalAuthorizeUrl); + } + + protected async virtual Task ReconstructOriginalAuthorizeUrlAsync() + { + if (_originalRequest == null) + { + return Input.RedirectUri; + } + // ¹¹½¨ÍêÕûµÄÊÚȨÇëÇó URL + var authorizeUrl = "/connect/authorize"; + var parameters = new Dictionary + { + ["client_id"] = _originalRequest.ClientId, + ["redirect_uri"] = _originalRequest.RedirectUri, + ["response_type"] = _originalRequest.ResponseType ?? "code", + ["scope"] = _originalRequest.Scope, + ["state"] = _originalRequest.State, + ["code_challenge"] = _originalRequest.CodeChallenge, + ["code_challenge_method"] = _originalRequest.CodeChallengeMethod, + ["prompt"] = "none" // Óû§ÒÑÈÏ֤£¬²»ÐèҪÔٴÎÌáʾ + }; + + // Ìí¼ӿÉѡµÄ nonce ²ÎÊý + if (!string.IsNullOrEmpty(_originalRequest.Nonce)) + { + parameters["nonce"] = _originalRequest.Nonce; + } + + return QueryHelpers.AddQueryString(authorizeUrl, parameters); } protected virtual Task ParseOriginalRequestFromRedirectUriAsync() From 2d765cdb960f009734236666b4b6fac3962a1b57 Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 24 Apr 2026 16:56:50 +0800 Subject: [PATCH 04/12] feat: Optimize the data export interface --- .../AbpExporterMagicodesIEExcelModule.cs | 13 ------------- .../Exporter/MagicodesIEExcelExporterProvider.cs | 5 +++++ .../Exporter/MagicodesIEExcelImporterProvider.cs | 4 ++++ .../Abp/Exporter/AbpExporterMiniExcelModule.cs | 16 +--------------- .../Abp/Exporter/MiniExcelExporterProvider.cs | 6 ++++++ .../Abp/Exporter/MiniExcelImporterProvider.cs | 6 ++++++ .../MiniSoftware/MiniExcelExporterProvider.cs | 4 ++++ .../MiniSoftware/MiniExcelImporterProvider.cs | 5 +++++ 8 files changed, 31 insertions(+), 28 deletions(-) diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/AbpExporterMagicodesIEExcelModule.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/AbpExporterMagicodesIEExcelModule.cs index 534b82df1..6d0f59f7f 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/AbpExporterMagicodesIEExcelModule.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/AbpExporterMagicodesIEExcelModule.cs @@ -1,7 +1,6 @@ using Magicodes.ExporterAndImporter.Core; using Magicodes.ExporterAndImporter.Excel; using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; using Volo.Abp.Modularity; namespace LINGYUN.Abp.Exporter.MagicodesIE.Excel; @@ -12,19 +11,7 @@ public class AbpExporterMagicodesIEExcelModule : AbpModule public override void ConfigureServices(ServiceConfigurationContext context) { context.Services.AddScoped(); - context.Services.AddScoped(); - context.Services.AddScoped(); - - context.Services.Replace( - ServiceDescriptor.Transient( - typeof(IExporterProvider), - typeof(MagicodesIEExcelExporterProvider))); - - context.Services.Replace( - ServiceDescriptor.Transient( - typeof(IImporterProvider), - typeof(MagicodesIEExcelImporterProvider))); } } \ No newline at end of file diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs index dd30f5e7e..0870369a1 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelExporterProvider.cs @@ -9,6 +9,11 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MagicodesIE.Excel; + +#pragma warning disable CS0618 +[ExposeServices(typeof(IExporterProvider))] +#pragma warning restore CS0618 +[ExposeServices(typeof(IExcelExporterProvider))] public class MagicodesIEExcelExporterProvider : IExcelExporterProvider, #pragma warning disable CS0618 diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs index 34c9e47c4..ca847c5fb 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MagicodesIE.Excel/LINGYUN/Abp/Exporter/MagicodesIEExcelImporterProvider.cs @@ -12,6 +12,10 @@ using Volo.Abp.Json; namespace LINGYUN.Abp.Exporter.MagicodesIE.Excel; +#pragma warning disable CS0618 +[ExposeServices(typeof(IImporterProvider))] +#pragma warning restore CS0618 +[ExposeServices(typeof(IExcelImporterProvider))] public class MagicodesIEExcelImporterProvider : IExcelImporterProvider, #pragma warning disable CS0618 diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs index 413f8d8b3..10a1ed554 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/AbpExporterMiniExcelModule.cs @@ -1,6 +1,4 @@ -using Microsoft.Extensions.DependencyInjection; -using Microsoft.Extensions.DependencyInjection.Extensions; -using System; +using System; using Volo.Abp.Modularity; namespace LINGYUN.Abp.Exporter.MiniExcel; @@ -9,16 +7,4 @@ namespace LINGYUN.Abp.Exporter.MiniExcel; [DependsOn(typeof(AbpExporterCoreModule))] public class AbpExporterMiniExcelModule : AbpModule { - public override void ConfigureServices(ServiceConfigurationContext context) - { - context.Services.Replace( - ServiceDescriptor.Transient( - typeof(IExporterProvider), - typeof(MiniExcelExporterProvider))); - - context.Services.Replace( - ServiceDescriptor.Transient( - typeof(IImporterProvider), - typeof(MiniExcelImporterProvider))); - } } \ No newline at end of file diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelExporterProvider.cs index 3d0c0f473..a2ac56433 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelExporterProvider.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Options; using MiniExcelLibs; using MiniExcelLibs.OpenXml; +using System; using System.Collections.Generic; using System.IO; using System.Threading; @@ -8,6 +9,11 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MiniExcel; + +#pragma warning disable CS0618 +[ExposeServices(typeof(IExporterProvider))] +#pragma warning restore CS0618 +[Obsolete("Use AbpExporterMiniSoftwareModule")] public class MiniExcelExporterProvider : IExporterProvider, ITransientDependency { private readonly AbpExporterMiniExcelOptions _options; diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelImporterProvider.cs index f655dc333..582877234 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniExcel/LINGYUN/Abp/Exporter/MiniExcelImporterProvider.cs @@ -1,6 +1,7 @@ using Microsoft.Extensions.Options; using MiniExcelLibs; using MiniExcelLibs.OpenXml; +using System; using System.Collections.Generic; using System.Collections.Immutable; using System.IO; @@ -8,6 +9,11 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MiniExcel; + +#pragma warning disable CS0618 +[ExposeServices(typeof(IImporterProvider))] +#pragma warning restore CS0618 +[Obsolete("Use AbpExporterMiniSoftwareModule")] public class MiniExcelImporterProvider : IImporterProvider, ITransientDependency { private readonly AbpExporterMiniExcelOptions _options; diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs index c7ae06be2..165102775 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelExporterProvider.cs @@ -10,6 +10,10 @@ using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MiniSoftware; +#pragma warning disable CS0618 +[ExposeServices(typeof(IExporterProvider))] +#pragma warning restore CS0618 +[ExposeServices(typeof(IExcelExporterProvider))] public class MiniExcelExporterProvider : IExcelExporterProvider, #pragma warning disable CS0618 diff --git a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs index 1daf8a318..d3319839e 100644 --- a/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs +++ b/aspnet-core/framework/exporter/LINGYUN.Abp.Exporter.MiniSoftware/LINGYUN/Abp/Exporter/MiniSoftware/MiniExcelImporterProvider.cs @@ -8,6 +8,11 @@ using System.Threading.Tasks; using Volo.Abp.DependencyInjection; namespace LINGYUN.Abp.Exporter.MiniSoftware; + +#pragma warning disable CS0618 +[ExposeServices(typeof(IImporterProvider))] +#pragma warning restore CS0618 +[ExposeServices(typeof(IExcelImporterProvider))] public class MiniExcelImporterProvider : IExcelImporterProvider, #pragma warning disable CS0618 From 55b5469719b6652fa9e014a0008d19239cd0b11a Mon Sep 17 00:00:00 2001 From: colin Date: Fri, 24 Apr 2026 16:58:28 +0800 Subject: [PATCH 05/12] feat: Optimize microservice data seeds --- ....MicroService.AuthServer.DbMigrator.csproj | 1 - .../appsettings.json | 96 +- .../AuthServerDbMigrationService.cs | 28 +- .../DataSeeds/IdentityClaimTypeDataSeeder.cs | 7 + .../DataSeeds/IdentityUserRoleDataSeeder.cs | 26 +- .../BackendAdminDbMigratorModule.cs | 6 +- ...icroService.BackendAdmin.DbMigrator.csproj | 3 +- .../appsettings.json | 2 +- ...ataSeeder.cs => AdminServiceDataSeeder.cs} | 10 +- .../BackendAdminDbMigrationEventHandler.cs | 4 +- .../BackendAdminDbMigrationService.cs | 28 +- ...dminMigrationsEntityFrameworkCoreModule.cs | 2 +- .../appsettings.json | 5 +- ...e.LocalizationManagement.DbMigrator.csproj | 1 - .../appsettings.json | 5 +- ...ocalizationManagementDbMigrationService.cs | 31 - ...LY.MicroService.Platform.DbMigrator.csproj | 1 - .../appsettings.json | 2 +- ...808_Add-Blob-Management-Module.Designer.cs | 1501 +++++++++++++++++ ...260424033808_Add-Blob-Management-Module.cs | 116 ++ ...latformMigrationsDbContextModelSnapshot.cs | 161 +- .../PlatformDbMigrationService.cs | 28 +- .../PlatformMigrationsDbContext.cs | 4 +- ...oService.RealtimeMessage.DbMigrator.csproj | 1 - .../appsettings.json | 5 +- .../RealtimeMessageDbMigrationService.cs | 31 - ...roService.TaskManagement.DbMigrator.csproj | 1 - .../appsettings.PostgreSql.json | 2 +- .../appsettings.json | 5 +- .../TaskManagementDbMigrationEventHandler.cs | 8 +- ...DataSeeder.cs => TaskServiceDataSeeder.cs} | 4 +- ...rvice.WebhooksManagement.DbMigrator.csproj | 1 - .../appsettings.json | 5 +- ...bhooksManagementDbMigrationEventHandler.cs | 5 +- .../LINGYUN/Abp/Gdpr/GdprRequestAppService.cs | 2 +- .../AbpNotificationsApplicationMappers.cs | 2 + .../NotificationPublishContext.cs | 2 +- 37 files changed, 1884 insertions(+), 258 deletions(-) rename aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/{BackendAdminDataSeeder.cs => AdminServiceDataSeeder.cs} (89%) create mode 100644 aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.Designer.cs create mode 100644 aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.cs rename aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/{TaskManagementDataSeeder.cs => TaskServiceDataSeeder.cs} (98%) diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/LY.MicroService.AuthServer.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/LY.MicroService.AuthServer.DbMigrator.csproj index 627584fb9..45c00f202 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/LY.MicroService.AuthServer.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/LY.MicroService.AuthServer.DbMigrator.csproj @@ -22,7 +22,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/appsettings.json index 5134cd6f5..c865dd625 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.DbMigrator/appsettings.json @@ -1,78 +1,34 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, - "StringEncryption": { - "DefaultPassPhrase": "s46c5q55nxpeS8Ra", - "InitVectorBytes": "s83ng0abvd02js84", - "DefaultSalt": "sf&5)s3#" - }, - "Serilog": { - "MinimumLevel": { - "Default": "Information", - "Override": { - "System": "Warning", - "Microsoft": "Warning", - "DotNetCore": "Information" - } - }, - "Enrich": [ "FromLogContext", "WithProcessId", "WithThreadId", "WithEnvironmentName", "WithMachineName", "WithApplicationName", "WithUniqueId" ], - "WriteTo": [ - { - "Name": "Console", - "Args": { - "restrictedToMinimumLevel": "Debug", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } - }, - { - "Name": "File", - "Args": { - "path": "Logs/Debug-.log", - "restrictedToMinimumLevel": "Debug", - "rollingInterval": "Day", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } - }, - { - "Name": "File", - "Args": { - "path": "Logs/Info-.log", - "restrictedToMinimumLevel": "Information", - "rollingInterval": "Day", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } - }, - { - "Name": "File", - "Args": { - "path": "Logs/Warn-.log", - "restrictedToMinimumLevel": "Warning", - "rollingInterval": "Day", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } + "OpenIddict": { + "Applications": { + "VueAdmin": { + "ClientId": "vue-admin-client", + "ClientSecret": "1q2w3e*", + "RootUrls": [ "http://localhost:5666" ] }, - { - "Name": "File", - "Args": { - "path": "Logs/Error-.log", - "restrictedToMinimumLevel": "Error", - "rollingInterval": "Day", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } + "InternalService": { + "ClientId": "InternalServiceClient", + "ClientSecret": "1q2w3e*" }, - { - "Name": "File", - "Args": { - "path": "Logs/Fatal-.log", - "restrictedToMinimumLevel": "Fatal", - "rollingInterval": "Day", - "outputTemplate": "{Timestamp:yyyy-MM-dd HH:mm:ss} [{Level:u3}] [{SourceContext}] [{ProcessId}] [{ThreadId}] - {Message:lj}{NewLine}{Exception}" - } + "VueOAuthClient": { + "ClientId": "vue-oauth-client", + "RootUrls": [ + "http://localhost:5666", + "http://localhost:30000", + "http://localhost:30010", + "http://localhost:30015", + "http://localhost:30020", + "http://localhost:30025", + "http://localhost:30030", + "http://localhost:30040", + "http://localhost:30045", + "http://localhost:30050", + "http://localhost:30060" + ] } - ] + } } } diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationService.cs index 79ef3a66e..e19004c0f 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/AuthServerDbMigrationService.cs @@ -1,8 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -15,14 +13,10 @@ namespace LY.MicroService.AuthServer.EntityFrameworkCore; public class AuthServerDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } + protected AuthServerDataSeeder DataSeeder { get; } public AuthServerDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, + AuthServerDataSeeder dataSeeder, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -34,25 +28,11 @@ public class AuthServerDbMigrationService : EfCoreRuntimeDbMigratorBase x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } } protected async override Task SeedAsync() { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); + // DbMigrator迁移数据种子 + await DataSeeder.SeedAsync(new DataSeedContext()); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs index 88e530b07..1b17c95f1 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityClaimTypeDataSeeder.cs @@ -1,5 +1,6 @@ using JetBrains.Annotations; using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using OpenIddict.Abstractions; using System.Threading.Tasks; using Volo.Abp.Data; @@ -23,6 +24,8 @@ public class IdentityClaimTypeDataSeeder : ITransientDependency GuidGenerator = guidGenerator; IdentityClaimTypeManager = identityClaimTypeManager; IdentityClaimTypeRepository = identityClaimTypeRepository; + + Logger = NullLogger.Instance; } public async virtual Task SeedAsync(DataSeedContext context) @@ -72,8 +75,12 @@ public class IdentityClaimTypeDataSeeder : ITransientDependency [CanBeNull] string description = null, IdentityClaimValueType valueType = IdentityClaimValueType.String) { + Logger.LogInformation("Check claim types {name} exists.", name); + if (!await IdentityClaimTypeRepository.AnyAsync(name)) { + Logger.LogInformation("Create new claim types {name}.", name); + await IdentityClaimTypeManager.CreateAsync( new IdentityClaimType( GuidGenerator.Create(), diff --git a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs index 2c7630193..26d77aa0f 100644 --- a/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs +++ b/aspnet-core/migrations/LY.MicroService.AuthServer.EntityFrameworkCore/DataSeeds/IdentityUserRoleDataSeeder.cs @@ -1,4 +1,6 @@ using Microsoft.AspNetCore.Identity; +using Microsoft.Extensions.Logging; +using Microsoft.Extensions.Logging.Abstractions; using Microsoft.Extensions.Options; using System; using System.Threading.Tasks; @@ -19,6 +21,8 @@ public class IdentityUserRoleDataSeeder : ITransientDependency public const string AdminPasswordPropertyName = "AdminPassword"; public const string AdminPasswordDefaultValue = "1q2w3E*"; + public ILogger Logger { protected get; set; } + protected IGuidGenerator GuidGenerator { get; } protected IIdentityRoleRepository RoleRepository { get; } protected IIdentityUserRepository UserRepository { get; } @@ -43,12 +47,19 @@ public class IdentityUserRoleDataSeeder : ITransientDependency UserManager = userManager; RoleManager = roleManager; IdentityOptions = identityOptions; + + Logger = NullLogger.Instance; } public virtual async Task SeedAsync(DataSeedContext context) { + Logger.LogInformation("Seeding the admin user roles..."); await SeedAdminUserAsync(context); + + Logger.LogInformation("Seeding the default roles..."); await SeedDefaultRoleAsync(context); + + Logger.LogInformation("Seeding user roles completed."); } private async Task SeedAdminUserAsync(DataSeedContext context) @@ -59,8 +70,13 @@ public class IdentityUserRoleDataSeeder : ITransientDependency var adminUserName = context?[AdminUserNamePropertyName] as string ?? AdminUserNameDefaultValue; Guid adminRoleId; + + Logger.LogInformation("Check admin role {adminRoleName} exists.", adminRoleName); + if (!await RoleManager.RoleExistsAsync(adminRoleName)) { + Logger.LogInformation("Create new role {adminRoleName}.", adminRoleName); + adminRoleId = GuidGenerator.Create(); var adminRole = new IdentityRole( adminRoleId, @@ -87,9 +103,13 @@ public class IdentityUserRoleDataSeeder : ITransientDependency var adminEmailAddress = context?[AdminEmailPropertyName] as string ?? AdminEmailDefaultValue; var adminPassword = context?[AdminPasswordPropertyName] as string ?? AdminPasswordDefaultValue; + Logger.LogInformation("Check admin user {adminUserName} exists.", adminUserName); + var adminUser = await UserManager.FindByNameAsync(adminUserName); if (adminUser == null) { + Logger.LogInformation("Create new user {adminUserName}.", adminUserName); + adminUser = new IdentityUser( adminUserId, adminUserName, @@ -100,6 +120,8 @@ public class IdentityUserRoleDataSeeder : ITransientDependency // 创建租户管理用户 (await UserManager.CreateAsync(adminUser)).CheckErrors(); + + Logger.LogInformation("Add user {adminUserName} password.", adminUserName); (await UserManager.AddPasswordAsync(adminUser, adminPassword)).CheckErrors(); } } @@ -107,8 +129,10 @@ public class IdentityUserRoleDataSeeder : ITransientDependency private async Task SeedDefaultRoleAsync(DataSeedContext context) { const string defaultRoleName = "Users"; - if (await RoleManager.FindByNameAsync(defaultRoleName) != null) + Logger.LogInformation("Check Role {defaultRoleName} exists.", defaultRoleName); + if (!await RoleManager.RoleExistsAsync(defaultRoleName)) { + Logger.LogInformation("Create new role {defaultRoleName}.", defaultRoleName); var roleId = GuidGenerator.Create(); var defaultRole = new IdentityRole( roleId, diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs index 77b9b3773..33394b8e8 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/BackendAdminDbMigratorModule.cs @@ -1,12 +1,11 @@ using LINGYUN.Abp.Auditing; +using LINGYUN.Abp.BlobManagement; using LINGYUN.Abp.CachingManagement; using LINGYUN.Abp.Identity; -using LINGYUN.Abp.IdentityServer; using LINGYUN.Abp.LocalizationManagement; using LINGYUN.Abp.MessageService; using LINGYUN.Abp.Notifications; using LINGYUN.Abp.OpenIddict; -using LINGYUN.Abp.OssManagement; using LINGYUN.Abp.SettingManagement; using LINGYUN.Abp.TaskManagement; using LINGYUN.Abp.TextTemplating; @@ -30,10 +29,9 @@ namespace LY.MicroService.BackendAdmin.DbMigrator; typeof(AbpAuditingApplicationContractsModule), typeof(AbpTextTemplatingApplicationContractsModule), typeof(AbpIdentityApplicationContractsModule), - typeof(AbpIdentityServerApplicationContractsModule), typeof(AbpOpenIddictApplicationContractsModule), typeof(PlatformApplicationContractModule), - typeof(AbpOssManagementApplicationContractsModule), + typeof(AbpBlobManagementApplicationContractsModule), typeof(AbpNotificationsApplicationContractsModule), typeof(AbpMessageServiceApplicationContractsModule), typeof(TaskManagementApplicationContractsModule), diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj index a75ccdcc7..20e58b06c 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/LY.MicroService.BackendAdmin.DbMigrator.csproj @@ -38,9 +38,8 @@ - + - diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/appsettings.json index 848a0f83b..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.DbMigrator/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/AdminServiceDataSeeder.cs similarity index 89% rename from aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs rename to aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/AdminServiceDataSeeder.cs index c0a681648..243674b95 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDataSeeder.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/AdminServiceDataSeeder.cs @@ -1,6 +1,5 @@ using Microsoft.Extensions.Logging; using Microsoft.Extensions.Logging.Abstractions; -using System; using System.Linq; using System.Threading.Tasks; using Volo.Abp.Authorization.Permissions; @@ -11,14 +10,14 @@ using Volo.Abp.PermissionManagement; namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; -public class BackendAdminDataSeeder : ITransientDependency +public class AdminServiceDataSeeder : ITransientDependency { - protected ILogger Logger { get; } + protected ILogger Logger { get; } protected ICurrentTenant CurrentTenant { get; } protected IPermissionDefinitionManager PermissionDefinitionManager { get; } protected IPermissionDataSeeder PermissionDataSeeder { get; } - public BackendAdminDataSeeder( + public AdminServiceDataSeeder( IPermissionDefinitionManager permissionDefinitionManager, IPermissionDataSeeder permissionDataSeeder, ICurrentTenant currentTenant) @@ -27,7 +26,7 @@ public class BackendAdminDataSeeder : ITransientDependency PermissionDataSeeder = permissionDataSeeder; CurrentTenant = currentTenant; - Logger = NullLogger.Instance; + Logger = NullLogger.Instance; } public virtual async Task SeedAsync(DataSeedContext context) @@ -59,3 +58,4 @@ public class BackendAdminDataSeeder : ITransientDependency Logger.LogInformation("Seed default role permissions completed."); } } + diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs index 5d9254cba..5f8ef58db 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationEventHandler.cs @@ -11,7 +11,7 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; public class BackendAdminDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase { - protected BackendAdminDataSeeder DataSeeder { get; } + protected AdminServiceDataSeeder DataSeeder { get; } public BackendAdminDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -20,7 +20,7 @@ public class BackendAdminDbMigrationEventHandler : EfCoreDatabaseMigrationEventH IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - BackendAdminDataSeeder dataSeeder) + AdminServiceDataSeeder dataSeeder) : base( ConnectionStringNameAttribute.GetConnStringName(), currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationService.cs index fdfa390fa..f86e34904 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminDbMigrationService.cs @@ -1,8 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -15,14 +13,10 @@ namespace LY.MicroService.BackendAdmin.EntityFrameworkCore; public class BackendAdminDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } + protected AdminServiceDataSeeder DataSeeder { get; } public BackendAdminDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, + AdminServiceDataSeeder dataSeeder, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -34,25 +28,11 @@ public class BackendAdminDbMigrationService : EfCoreRuntimeDbMigratorBase x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } } protected async override Task SeedAsync() { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); + // DbMigrator迁移数据种子 + await DataSeeder.SeedAsync(new DataSeedContext()); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs index d3ba6c223..531a967fa 100644 --- a/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs +++ b/aspnet-core/migrations/LY.MicroService.BackendAdmin.EntityFrameworkCore/BackendAdminMigrationsEntityFrameworkCoreModule.cs @@ -35,7 +35,7 @@ public class BackendAdminMigrationsEntityFrameworkCoreModule : AbpModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Parameter); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); } diff --git a/aspnet-core/migrations/LY.MicroService.IdentityServer.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.IdentityServer.DbMigrator/appsettings.json index 58c4aa811..cc93682ad 100644 --- a/aspnet-core/migrations/LY.MicroService.IdentityServer.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.IdentityServer.DbMigrator/appsettings.json @@ -1,9 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=IdentityServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None" }, "IdentityServer": { "Clients": { diff --git a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/LY.MicroService.LocalizationManagement.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/LY.MicroService.LocalizationManagement.DbMigrator.csproj index e96a66775..b74eb1836 100644 --- a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/LY.MicroService.LocalizationManagement.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/LY.MicroService.LocalizationManagement.DbMigrator.csproj @@ -22,7 +22,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/appsettings.json index 5134cd6f5..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.DbMigrator/appsettings.json @@ -1,9 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementDbMigrationService.cs index acd62ada3..a8fa4423b 100644 --- a/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.LocalizationManagement.EntityFrameworkCore/LocalizationManagementDbMigrationService.cs @@ -1,9 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; -using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; @@ -15,14 +12,7 @@ namespace LY.MicroService.LocalizationManagement.EntityFrameworkCore; public class LocalizationManagementDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } - public LocalizationManagementDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -33,26 +23,5 @@ public class LocalizationManagementDbMigrationService : EfCoreRuntimeDbMigratorB ConnectionStringNameAttribute.GetConnStringName(), unitOfWorkManager, serviceProvider, currentTenant, abpDistributedLock, distributedEventBus, loggerFactory) { - DataSeeder = dataSeeder; - DbSchemaMigrator = dbSchemaMigrator; - TenantRepository = tenantRepository; - } - - protected async override Task LockAndApplyDatabaseMigrationsAsync() - { - await base.LockAndApplyDatabaseMigrationsAsync(); - - var tenants = await TenantRepository.GetListAsync(); - foreach (var tenant in tenants.Where(x => x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } - } - - protected async override Task SeedAsync() - { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/LY.MicroService.Platform.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/LY.MicroService.Platform.DbMigrator.csproj index 5c4f9a294..6e052a446 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/LY.MicroService.Platform.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/LY.MicroService.Platform.DbMigrator.csproj @@ -23,7 +23,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/appsettings.json index 848a0f83b..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.Platform.DbMigrator/appsettings.json @@ -1,6 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=abp;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.Designer.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.Designer.cs new file mode 100644 index 000000000..e4cc7d104 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.Designer.cs @@ -0,0 +1,1501 @@ +// +using System; +using LY.MicroService.Platform.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Metadata; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Volo.Abp.EntityFrameworkCore; + +#nullable disable + +namespace LY.MicroService.Platform.EntityFrameworkCore.Migrations +{ + [DbContext(typeof(PlatformMigrationsDbContext))] + [Migration("20260424033808_Add-Blob-Management-Module")] + partial class AddBlobManagementModule + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) + .HasAnnotation("ProductVersion", "10.0.3") + .HasAnnotation("Relational:MaxIdentifierLength", 64); + + MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("char(36)"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Code"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDatas", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AllowBeNull") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(true); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("char(36)"); + + b.Property("DefaultValue") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DefaultValue"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Description"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsStatic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Name"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("ValueType") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("DataId"); + + b.HasIndex("Name"); + + b.ToTable("AppPlatformDataItems", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Category") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Category"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformFeedbacks", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Url") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Capacity") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Capacity"); + + b.Property("Content") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("FeedbackId") + .HasColumnType("char(36)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("FeedbackId"); + + b.ToTable("AppPlatformFeedbackComments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Layouts.Layout", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DataId") + .HasColumnType("char(36)"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformLayouts", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.Menu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Code") + .IsRequired() + .HasMaxLength(23) + .HasColumnType("varchar(23)") + .HasColumnName("Code"); + + b.Property("Component") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Component"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasColumnType("longtext"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("IsPublic") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LayoutId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Path") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("Redirect") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Redirect"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.RoleMenu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("RoleName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("RoleName"); + + b.Property("Startup") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("RoleName", "MenuId"); + + b.ToTable("AppPlatformRoleMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserFavoriteMenu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("AliasName") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("AliasName"); + + b.Property("Color") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Color"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DisplayName") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("DisplayName"); + + b.Property("Framework") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Framework"); + + b.Property("Icon") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Icon"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Name"); + + b.Property("Path") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Path"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserFavoriteMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Menus.UserMenu", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("MenuId") + .HasColumnType("char(36)"); + + b.Property("Startup") + .HasColumnType("tinyint(1)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.HasIndex("UserId", "MenuId"); + + b.ToTable("AppPlatformUserMenus", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("BodyTransferEncoding") + .HasColumnType("int"); + + b.Property("CC") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("CC"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeliveryNotificationOptions") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("From") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("From"); + + b.Property("IsBodyHtml") + .HasColumnType("tinyint(1)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Normalize") + .HasColumnType("tinyint(1)"); + + b.Property("Priority") + .HasColumnType("int"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("Subject") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Subject"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEmailMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("BlobName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("BlobName"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Name"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageAttachments", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Key") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)") + .HasColumnName("Key"); + + b.Property("MessageId") + .HasColumnType("char(36)"); + + b.Property("Value") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Value"); + + b.HasKey("Id"); + + b.HasIndex("MessageId"); + + b.ToTable("AppPlatformEmailMessageHeaders", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.SmsMessage", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("Content") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("Content"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Provider") + .HasMaxLength(128) + .HasColumnType("varchar(128)") + .HasColumnName("Provider"); + + b.Property("Reason") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Reason"); + + b.Property("Receiver") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Receiver"); + + b.Property("SendCount") + .HasColumnType("int"); + + b.Property("SendTime") + .HasColumnType("datetime(6)"); + + b.Property("Sender") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("Sender"); + + b.Property("Status") + .HasColumnType("int"); + + b.Property("UserId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformSmsMessages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Authors"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("Description") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Description"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("ForceUpdate") + .HasColumnType("tinyint(1)"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Level") + .HasColumnType("int"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("Note") + .IsRequired() + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Note"); + + b.Property("Version") + .IsRequired() + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("Version"); + + b.HasKey("Id"); + + b.HasIndex("Name", "Version"); + + b.ToTable("AppPlatformPackages", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("int"); + + MySqlPropertyBuilderExtensions.UseMySqlIdentityColumn(b.Property("Id")); + + b.Property("Authors") + .HasMaxLength(100) + .HasColumnType("varchar(100)") + .HasColumnName("Authors"); + + b.Property("ContentType") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("ContentType"); + + b.Property("CreatedAt") + .HasColumnType("datetime(6)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("int"); + + b.Property("ExtraProperties") + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("License") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("License"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("PackageId") + .HasColumnType("char(36)"); + + b.Property("SHA256") + .HasMaxLength(256) + .HasColumnType("varchar(256)") + .HasColumnName("SHA256"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("Summary") + .HasMaxLength(1024) + .HasColumnType("varchar(1024)") + .HasColumnName("Summary"); + + b.Property("UpdatedAt") + .HasColumnType("datetime(6)"); + + b.Property("Url") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Url"); + + b.HasKey("Id"); + + b.HasIndex("PackageId", "Name"); + + b.ToTable("AppPlatformPackageBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Platform.Portal.Enterprise", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("Address") + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Address"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DeleterId") + .HasColumnType("char(36)") + .HasColumnName("DeleterId"); + + b.Property("DeletionTime") + .HasColumnType("datetime(6)") + .HasColumnName("DeletionTime"); + + b.Property("EnglishName") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("EnglishName"); + + b.Property("ExpirationDate") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("IsDeleted") + .ValueGeneratedOnAdd() + .HasColumnType("tinyint(1)") + .HasDefaultValue(false) + .HasColumnName("IsDeleted"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("LegalMan") + .HasMaxLength(60) + .HasColumnType("varchar(60)") + .HasColumnName("LegalMan"); + + b.Property("Logo") + .HasMaxLength(512) + .HasColumnType("varchar(512)") + .HasColumnName("Logo"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(255) + .HasColumnType("varchar(255)") + .HasColumnName("Name"); + + b.Property("OrganizationCode") + .HasMaxLength(16) + .HasColumnType("varchar(16)") + .HasColumnName("OrganizationCode"); + + b.Property("RegistrationCode") + .HasMaxLength(30) + .HasColumnType("varchar(30)") + .HasColumnName("RegistrationCode"); + + b.Property("RegistrationDate") + .HasColumnType("datetime(6)"); + + b.Property("TaxCode") + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("TaxCode"); + + b.Property("TenantId") + .HasColumnType("char(36)"); + + b.HasKey("Id"); + + b.ToTable("AppPlatformEnterprises", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => + { + b.HasOne("LINGYUN.Platform.Datas.Data", null) + .WithMany("Items") + .HasForeignKey("DataId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackAttachment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Attachments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.FeedbackComment", b => + { + b.HasOne("LINGYUN.Platform.Feedbacks.Feedback", null) + .WithMany("Comments") + .HasForeignKey("FeedbackId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageAttachment", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Attachments") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessageHeader", b => + { + b.HasOne("LINGYUN.Platform.Messages.EmailMessage", null) + .WithMany("Headers") + .HasForeignKey("MessageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.PackageBlob", b => + { + b.HasOne("LINGYUN.Platform.Packages.Package", "Package") + .WithMany("Blobs") + .HasForeignKey("PackageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.Navigation("Package"); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => + { + b.Navigation("Items"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Feedbacks.Feedback", b => + { + b.Navigation("Attachments"); + + b.Navigation("Comments"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Messages.EmailMessage", b => + { + b.Navigation("Attachments"); + + b.Navigation("Headers"); + }); + + modelBuilder.Entity("LINGYUN.Platform.Packages.Package", b => + { + b.Navigation("Blobs"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.cs new file mode 100644 index 000000000..ea11353c7 --- /dev/null +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/20260424033808_Add-Blob-Management-Module.cs @@ -0,0 +1,116 @@ +using System; +using Microsoft.EntityFrameworkCore.Migrations; + +#nullable disable + +namespace LY.MicroService.Platform.EntityFrameworkCore.Migrations +{ + /// + public partial class AddBlobManagementModule : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.CreateTable( + name: "AbpBlobContainers", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(128)", maxLength: 128, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobContainers", x => x.Id); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateTable( + name: "AbpBlobs", + columns: table => new + { + Id = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + TenantId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + ContainerId = table.Column(type: "char(36)", nullable: false, collation: "ascii_general_ci"), + ParentId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + Name = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + Type = table.Column(type: "int", nullable: false), + ContentType = table.Column(type: "varchar(128)", maxLength: 128, nullable: true) + .Annotation("MySql:CharSet", "utf8mb4"), + Size = table.Column(type: "bigint", nullable: false), + ExpirationTime = table.Column(type: "datetime(6)", nullable: true), + Provider = table.Column(type: "varchar(64)", maxLength: 64, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + FullName = table.Column(type: "varchar(256)", maxLength: 256, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + DownloadCount = table.Column(type: "bigint", nullable: false), + ExtraProperties = table.Column(type: "longtext", nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + ConcurrencyStamp = table.Column(type: "varchar(40)", maxLength: 40, nullable: false) + .Annotation("MySql:CharSet", "utf8mb4"), + CreationTime = table.Column(type: "datetime(6)", nullable: false), + CreatorId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci"), + LastModificationTime = table.Column(type: "datetime(6)", nullable: true), + LastModifierId = table.Column(type: "char(36)", nullable: true, collation: "ascii_general_ci") + }, + constraints: table => + { + table.PrimaryKey("PK_AbpBlobs", x => x.Id); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobContainers_ContainerId", + column: x => x.ContainerId, + principalTable: "AbpBlobContainers", + principalColumn: "Id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "FK_AbpBlobs_AbpBlobs_ParentId", + column: x => x.ParentId, + principalTable: "AbpBlobs", + principalColumn: "Id"); + }) + .Annotation("MySql:CharSet", "utf8mb4"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobContainers_TenantId_Name", + table: "AbpBlobContainers", + columns: new[] { "TenantId", "Name" }); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ContainerId", + table: "AbpBlobs", + column: "ContainerId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_ParentId", + table: "AbpBlobs", + column: "ParentId"); + + migrationBuilder.CreateIndex( + name: "IX_AbpBlobs_TenantId_ContainerId_FullName", + table: "AbpBlobs", + columns: new[] { "TenantId", "ContainerId", "FullName" }); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "AbpBlobs"); + + migrationBuilder.DropTable( + name: "AbpBlobContainers"); + } + } +} diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/PlatformMigrationsDbContextModelSnapshot.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/PlatformMigrationsDbContextModelSnapshot.cs index fbc4a17de..82193982f 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/PlatformMigrationsDbContextModelSnapshot.cs +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/Migrations/PlatformMigrationsDbContextModelSnapshot.cs @@ -19,11 +19,152 @@ namespace LY.MicroService.Platform.EntityFrameworkCore.Migrations #pragma warning disable 612, 618 modelBuilder .HasAnnotation("_Abp_DatabaseProvider", EfCoreDatabaseProvider.MySql) - .HasAnnotation("ProductVersion", "9.0.0") + .HasAnnotation("ProductVersion", "10.0.3") .HasAnnotation("Relational:MaxIdentifierLength", 64); MySqlModelBuilderExtensions.AutoIncrementColumns(modelBuilder); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("ContainerId") + .HasColumnType("char(36)"); + + b.Property("ContentType") + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("DownloadCount") + .HasColumnType("bigint"); + + b.Property("ExpirationTime") + .HasColumnType("datetime(6)"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("FullName") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(256) + .HasColumnType("varchar(256)"); + + b.Property("ParentId") + .HasColumnType("char(36)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("Size") + .HasColumnType("bigint"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.Property("Type") + .HasColumnType("int"); + + b.HasKey("Id"); + + b.HasIndex("ContainerId"); + + b.HasIndex("ParentId"); + + b.HasIndex("TenantId", "ContainerId", "FullName"); + + b.ToTable("AbpBlobs", (string)null); + }); + + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.BlobContainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("char(36)"); + + b.Property("ConcurrencyStamp") + .IsConcurrencyToken() + .IsRequired() + .HasMaxLength(40) + .HasColumnType("varchar(40)") + .HasColumnName("ConcurrencyStamp"); + + b.Property("CreationTime") + .HasColumnType("datetime(6)") + .HasColumnName("CreationTime"); + + b.Property("CreatorId") + .HasColumnType("char(36)") + .HasColumnName("CreatorId"); + + b.Property("ExtraProperties") + .IsRequired() + .HasColumnType("longtext") + .HasColumnName("ExtraProperties"); + + b.Property("LastModificationTime") + .HasColumnType("datetime(6)") + .HasColumnName("LastModificationTime"); + + b.Property("LastModifierId") + .HasColumnType("char(36)") + .HasColumnName("LastModifierId"); + + b.Property("Name") + .IsRequired() + .HasMaxLength(128) + .HasColumnType("varchar(128)"); + + b.Property("Provider") + .IsRequired() + .HasMaxLength(64) + .HasColumnType("varchar(64)"); + + b.Property("TenantId") + .HasColumnType("char(36)") + .HasColumnName("TenantId"); + + b.HasKey("Id"); + + b.HasIndex("TenantId", "Name"); + + b.ToTable("AbpBlobContainers", (string)null); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => { b.Property("Id") @@ -1254,6 +1395,19 @@ namespace LY.MicroService.Platform.EntityFrameworkCore.Migrations b.ToTable("AppPlatformEnterprises", (string)null); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.HasOne("LINGYUN.Abp.BlobManagement.BlobContainer", null) + .WithMany() + .HasForeignKey("ContainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + + b.HasOne("LINGYUN.Abp.BlobManagement.Blob", null) + .WithMany("Blobs") + .HasForeignKey("ParentId"); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.DataItem", b => { b.HasOne("LINGYUN.Platform.Datas.Data", null) @@ -1310,6 +1464,11 @@ namespace LY.MicroService.Platform.EntityFrameworkCore.Migrations b.Navigation("Package"); }); + modelBuilder.Entity("LINGYUN.Abp.BlobManagement.Blob", b => + { + b.Navigation("Blobs"); + }); + modelBuilder.Entity("LINGYUN.Platform.Datas.Data", b => { b.Navigation("Items"); diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationService.cs index 2989f6fef..f54ecaa88 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformDbMigrationService.cs @@ -1,8 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; @@ -15,14 +13,10 @@ namespace LY.MicroService.Platform.EntityFrameworkCore; public class PlatformDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } + protected PlatformServiceDataSeeder DataSeeder { get; } public PlatformDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, + PlatformServiceDataSeeder dataSeeder, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -34,25 +28,11 @@ public class PlatformDbMigrationService : EfCoreRuntimeDbMigratorBase x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } } protected async override Task SeedAsync() { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); + // DbMigrator迁移数据种子 + await DataSeeder.SeedAsync(new DataSeedContext()); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsDbContext.cs b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsDbContext.cs index b81c103c4..2d6ffe20e 100644 --- a/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsDbContext.cs +++ b/aspnet-core/migrations/LY.MicroService.Platform.EntityFrameworkCore/PlatformMigrationsDbContext.cs @@ -1,4 +1,5 @@ -using LINGYUN.Platform.EntityFrameworkCore; +using LINGYUN.Abp.BlobManagement.EntityFrameworkCore; +using LINGYUN.Platform.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; @@ -19,5 +20,6 @@ public class PlatformMigrationsDbContext : AbpDbContextruntime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.DbMigrator/appsettings.json index 5134cd6f5..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.DbMigrator/appsettings.json @@ -1,9 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationService.cs b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationService.cs index 466ac1455..19b14fbe8 100644 --- a/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationService.cs +++ b/aspnet-core/migrations/LY.MicroService.RealtimeMessage.EntityFrameworkCore/RealtimeMessageDbMigrationService.cs @@ -1,9 +1,6 @@ using LINGYUN.Abp.Data.DbMigrator; -using LINGYUN.Abp.Saas.Tenants; using Microsoft.Extensions.Logging; using System; -using System.Linq; -using System.Threading.Tasks; using Volo.Abp.Data; using Volo.Abp.DependencyInjection; using Volo.Abp.DistributedLocking; @@ -15,14 +12,7 @@ namespace LY.MicroService.RealtimeMessage.EntityFrameworkCore; public class RealtimeMessageDbMigrationService : EfCoreRuntimeDbMigratorBase, ITransientDependency { - protected IDataSeeder DataSeeder { get; } - protected IDbSchemaMigrator DbSchemaMigrator { get; } - protected ITenantRepository TenantRepository { get; } - public RealtimeMessageDbMigrationService( - IDataSeeder dataSeeder, - IDbSchemaMigrator dbSchemaMigrator, - ITenantRepository tenantRepository, ICurrentTenant currentTenant, IUnitOfWorkManager unitOfWorkManager, IServiceProvider serviceProvider, @@ -33,26 +23,5 @@ public class RealtimeMessageDbMigrationService : EfCoreRuntimeDbMigratorBase(), unitOfWorkManager, serviceProvider, currentTenant, abpDistributedLock, distributedEventBus, loggerFactory) { - DataSeeder = dataSeeder; - DbSchemaMigrator = dbSchemaMigrator; - TenantRepository = tenantRepository; - } - - protected async override Task LockAndApplyDatabaseMigrationsAsync() - { - await base.LockAndApplyDatabaseMigrationsAsync(); - - var tenants = await TenantRepository.GetListAsync(); - foreach (var tenant in tenants.Where(x => x.IsActive)) - { - await LockAndApplyDatabaseWithTenantMigrationsAsync(tenant.Id); - } - } - - protected async override Task SeedAsync() - { - Logger.LogInformation($"Executing {(!CurrentTenant.IsAvailable ? "host" : CurrentTenant.Name ?? CurrentTenant.GetId().ToString())} database seed..."); - - await DataSeeder.SeedAsync(CurrentTenant.Id); } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/LY.MicroService.TaskManagement.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/LY.MicroService.TaskManagement.DbMigrator.csproj index b5e9ef54f..569cc0f57 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/LY.MicroService.TaskManagement.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/LY.MicroService.TaskManagement.DbMigrator.csproj @@ -19,7 +19,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.PostgreSql.json b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.PostgreSql.json index 7f403166d..b6451cdce 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.PostgreSql.json +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.PostgreSql.json @@ -1,5 +1,5 @@ { "ConnectionStrings": { - "Default": "Host=127.0.0.1;Database=Platform-V70;Username=postgres;Password=123456;SslMode=Prefer" + "Default": "Host=localhost;Database=abp;Username=postgres;Password=123456;SslMode=Prefer" } } \ No newline at end of file diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.json index 5134cd6f5..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.DbMigrator/appsettings.json @@ -1,9 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs index 9c5f25def..09366ef7f 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDbMigrationEventHandler.cs @@ -15,7 +15,7 @@ public class TaskManagementDbMigrationEventHandler : EfCoreDatabaseMigrationEventHandlerBase, IDistributedEventHandler> { - protected TaskManagementDataSeeder DataSeeder { get; } + protected TaskServiceDataSeeder DataSeeder { get; } public TaskManagementDbMigrationEventHandler( ICurrentTenant currentTenant, @@ -24,8 +24,10 @@ public class TaskManagementDbMigrationEventHandler : IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory, - TaskManagementDataSeeder dataSeeder) - : base("TaskManagementDbMigrator", currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) + TaskServiceDataSeeder dataSeeder) + : base( + ConnectionStringNameAttribute.GetConnStringName(), + currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { DataSeeder = dataSeeder; } diff --git a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskServiceDataSeeder.cs similarity index 98% rename from aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs rename to aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskServiceDataSeeder.cs index b9c5fa475..6f941860c 100644 --- a/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskManagementDataSeeder.cs +++ b/aspnet-core/migrations/LY.MicroService.TaskManagement.EntityFrameworkCore/TaskServiceDataSeeder.cs @@ -10,14 +10,14 @@ using Volo.Abp.MultiTenancy; namespace LY.MicroService.TaskManagement.EntityFrameworkCore; -public class TaskManagementDataSeeder : ITransientDependency +public class TaskServiceDataSeeder : ITransientDependency { protected AbpBackgroundTasksOptions Options { get; } protected IJobStore JobStore { get; } protected IJobScheduler JobScheduler { get; } protected ICurrentTenant CurrentTenant { get; } - public TaskManagementDataSeeder( + public TaskServiceDataSeeder( IOptions options, IJobStore jobStore, IJobScheduler jobScheduler, diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/LY.MicroService.WebhooksManagement.DbMigrator.csproj b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/LY.MicroService.WebhooksManagement.DbMigrator.csproj index 1ee8ab370..09719641b 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/LY.MicroService.WebhooksManagement.DbMigrator.csproj +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/LY.MicroService.WebhooksManagement.DbMigrator.csproj @@ -20,7 +20,6 @@ runtime; build; native; contentfiles; analyzers; buildtransitive - diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/appsettings.json b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/appsettings.json index 5134cd6f5..3a9b9034b 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/appsettings.json +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.DbMigrator/appsettings.json @@ -1,9 +1,6 @@ { "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs index 30c0a2212..d7cfff227 100644 --- a/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs +++ b/aspnet-core/migrations/LY.MicroService.WebhooksManagement.EntityFrameworkCore/WebhooksManagementDbMigrationEventHandler.cs @@ -1,4 +1,5 @@ using Microsoft.Extensions.Logging; +using Volo.Abp.Data; using Volo.Abp.DistributedLocking; using Volo.Abp.EntityFrameworkCore.Migrations; using Volo.Abp.EventBus.Distributed; @@ -16,7 +17,9 @@ public class WebhooksManagementDbMigrationEventHandler : EfCoreDatabaseMigration IAbpDistributedLock abpDistributedLock, IDistributedEventBus distributedEventBus, ILoggerFactory loggerFactory) - : base("WebhooksManagementDbMigrator", currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) + : base( + ConnectionStringNameAttribute.GetConnStringName(), + currentTenant, unitOfWorkManager, tenantStore, abpDistributedLock, distributedEventBus, loggerFactory) { } } diff --git a/aspnet-core/modules/gdpr/LINGYUN.Abp.Gdpr.Application/LINGYUN/Abp/Gdpr/GdprRequestAppService.cs b/aspnet-core/modules/gdpr/LINGYUN.Abp.Gdpr.Application/LINGYUN/Abp/Gdpr/GdprRequestAppService.cs index 0d7f3e0c1..1bb757399 100644 --- a/aspnet-core/modules/gdpr/LINGYUN.Abp.Gdpr.Application/LINGYUN/Abp/Gdpr/GdprRequestAppService.cs +++ b/aspnet-core/modules/gdpr/LINGYUN.Abp.Gdpr.Application/LINGYUN/Abp/Gdpr/GdprRequestAppService.cs @@ -21,7 +21,7 @@ namespace LINGYUN.Abp.Gdpr; [Authorize] public class GdprRequestAppService( IJsonSerializer jsonSerializer, - IExporterProvider exporterProvider, + IExcelExporterProvider exporterProvider, IOptions gdprOptions, IDistributedEventBus distributedEventBus, IDistributedCache gdprRequestCache, diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/AbpNotificationsApplicationMappers.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/AbpNotificationsApplicationMappers.cs index 0e03eb6a0..adfe86b05 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/AbpNotificationsApplicationMappers.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Application/LINGYUN/Abp/Notifications/AbpNotificationsApplicationMappers.cs @@ -43,9 +43,11 @@ public partial class NotificationSendRecordInfoToNotificationSendRecordDtoMapper _userNotificationInfoMapper = userNotificationInfoMapper; } + [MapperIgnoreTarget(nameof(NotificationSendRecordDto.Notification))] [MapProperty(nameof(NotificationSendRecordInfo.Id), nameof(NotificationSendRecordDto.Id))] public override partial NotificationSendRecordDto Map(NotificationSendRecordInfo source); + [MapperIgnoreTarget(nameof(NotificationSendRecordDto.Notification))] [MapProperty(nameof(NotificationSendRecordInfo.Id), nameof(NotificationSendRecordDto.Id))] public override partial void Map(NotificationSendRecordInfo source, NotificationSendRecordDto destination); diff --git a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Core/LINGYUN/Abp/Notifications/NotificationPublishContext.cs b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Core/LINGYUN/Abp/Notifications/NotificationPublishContext.cs index d8872f63f..0bbc2a293 100644 --- a/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Core/LINGYUN/Abp/Notifications/NotificationPublishContext.cs +++ b/aspnet-core/modules/realtime-notifications/LINGYUN.Abp.Notifications.Core/LINGYUN/Abp/Notifications/NotificationPublishContext.cs @@ -26,7 +26,7 @@ public class NotificationPublishContext Users = users; } - public void Cancel(string reason, Exception exception = null) + public void Cancel(string reason, Exception? exception = null) { Reason = reason; Exception = exception; From a16dd3b6abc12799aafc6752f8402b7180e05cd2 Mon Sep 17 00:00:00 2001 From: colin Date: Sat, 25 Apr 2026 08:08:23 +0800 Subject: [PATCH 06/12] feat: Optimize microservice configuration --- .../AbpLoggingSerilogElasticsearchMappers.cs | 2 + .../LINGYUN.Abp.OpenApi.IdentityServer.csproj | 1 + .../AuthServerHttpApiHostModule.Configure.cs | 63 +- .../AuthServerHttpApiHostModule.Seeder.cs | 10 - .../appsettings.Development.json | 35 +- .../appsettings.json | 5 +- .../AuthServerModule.Configure.cs | 44 +- .../LY.MicroService.AuthServer.csproj | 4 - .../Properties/launchSettings.json | 2 +- .../appsettings.Development.json | 75 +- .../LY.MicroService.AuthServer/package.json | 6 +- .../wwwroot/css/global-styles.css | 9 + .../@fortawesome/fontawesome-free/css/all.css | 13308 ++++++++++------ .../fontawesome-free/css/v4-shims.css | 2512 +-- .../webfonts/fa-brands-400.ttf | Bin 210792 -> 0 bytes .../webfonts/fa-brands-400.woff2 | Bin 118684 -> 110088 bytes .../webfonts/fa-regular-400.ttf | Bin 68064 -> 0 bytes .../webfonts/fa-regular-400.woff2 | Bin 25472 -> 18924 bytes .../webfonts/fa-solid-900.ttf | Bin 426112 -> 0 bytes .../webfonts/fa-solid-900.woff2 | Bin 158220 -> 114740 bytes .../webfonts/fa-v4compatibility.ttf | Bin 10836 -> 0 bytes .../webfonts/fa-v4compatibility.woff2 | Bin 4796 -> 4032 bytes .../wwwroot/libs/@popperjs/popper.min.js | 6 + .../wwwroot/libs/@popperjs/popper.min.js.map | 1 + .../wwwroot/libs/abp/core/abp.js | 11 + .../css/dataTables.bootstrap5.css | 109 +- .../libs/datatables.net/js/dataTables.min.js | 4 +- .../libs/jquery-form/jquery.form.min.js | 22 - .../jquery-validation/abp.jquery.validate.js | 27 + .../libs/sweetalert2/sweetalert2.all.js | 777 +- .../libs/sweetalert2/sweetalert2.all.min.js | 6 +- .../wwwroot/libs/sweetalert2/sweetalert2.css | 24 +- .../libs/sweetalert2/sweetalert2.esm.all.js | 777 +- .../sweetalert2/sweetalert2.esm.all.min.js | 6 +- .../libs/sweetalert2/sweetalert2.esm.js | 775 +- .../libs/sweetalert2/sweetalert2.esm.min.js | 4 +- .../wwwroot/libs/sweetalert2/sweetalert2.js | 775 +- .../libs/sweetalert2/sweetalert2.min.css | 2 +- .../libs/sweetalert2/sweetalert2.min.js | 4 +- ...BackendAdminHttpApiHostModule.Configure.cs | 29 +- .../BackendAdminHttpApiHostModule.cs | 1 - .../Properties/launchSettings.json | 2 +- .../appsettings.Development.json | 30 +- .../appsettings.json | 5 +- ...entityServerHttpApiHostModule.Configure.cs | 3 +- ...onManagementHttpApiHostModule.Configure.cs | 29 +- .../Properties/launchSettings.json | 2 +- .../appsettings.Development.json | 30 +- .../appsettings.json | 5 +- ...rmManagementHttpApiHostModule.Configure.cs | 28 +- .../Properties/launchSettings.json | 2 +- .../appsettings.Development.json | 38 +- .../appsettings.json | 3 + .../Properties/launchSettings.json | 2 +- ...ltimeMessageHttpApiHostModule.Configure.cs | 30 +- .../appsettings.Development.json | 40 +- .../appsettings.json | 5 +- .../Properties/launchSettings.json | 2 +- ...skManagementHttpApiHostModule.Configure.cs | 36 +- .../appsettings.Development.json | 48 +- .../appsettings.json | 5 +- .../Properties/launchSettings.json | 2 +- .../TenantHeaderParamter.cs | 4 +- ...ksManagementHttpApiHostModule.Configure.cs | 56 +- ...sManagementHttpApiHostModule.DataSeeder.cs | 15 - .../WebhooksManagementHttpApiHostModule.cs | 1 - .../appsettings.Development.json | 38 +- .../appsettings.json | 3 + .../Properties/launchSettings.json | 2 +- .../TenantHeaderParamter.cs | 4 +- ...atManagementHttpApiHostModule.Configure.cs | 59 +- .../appsettings.Development.json | 37 +- .../appsettings.json | 3 + .../Properties/launchSettings.json | 2 +- ...owManagementHttpApiHostModule.Configure.cs | 35 +- ...wManagementHttpApiHostModule.DataSeeder.cs | 15 - .../appsettings.Development.json | 48 +- .../appsettings.json | 3 + .../InternalGatewayModule.cs | 76 +- ...NGYUN.MicroService.Internal.Gateway.csproj | 1 + .../appsettings.Development.json | 23 +- .../yarp.json | 248 +- .../OpenApiGatewayModule.cs | 19 +- .../appsettings.Development.json | 22 +- 84 files changed, 12504 insertions(+), 7993 deletions(-) delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Seeder.cs create mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/css/global-styles.css delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-regular-400.ttf delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-solid-900.ttf delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-v4compatibility.ttf create mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@popperjs/popper.min.js create mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@popperjs/popper.min.js.map delete mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/jquery-form/jquery.form.min.js create mode 100644 aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/jquery-validation/abp.jquery.validate.js delete mode 100644 aspnet-core/services/LY.MicroService.WebhooksManagement.HttpApi.Host/WebhooksManagementHttpApiHostModule.DataSeeder.cs delete mode 100644 aspnet-core/services/LY.MicroService.WorkflowManagement.HttpApi.Host/WorkflowManagementHttpApiHostModule.DataSeeder.cs diff --git a/aspnet-core/framework/logging/LINGYUN.Abp.Logging.Serilog.Elasticsearch/LINGYUN/Abp/AuditLogging/Serilog/Elasticsearch/AbpLoggingSerilogElasticsearchMappers.cs b/aspnet-core/framework/logging/LINGYUN.Abp.Logging.Serilog.Elasticsearch/LINGYUN/Abp/AuditLogging/Serilog/Elasticsearch/AbpLoggingSerilogElasticsearchMappers.cs index 33a359884..4ddde949a 100644 --- a/aspnet-core/framework/logging/LINGYUN.Abp.Logging.Serilog.Elasticsearch/LINGYUN/Abp/AuditLogging/Serilog/Elasticsearch/AbpLoggingSerilogElasticsearchMappers.cs +++ b/aspnet-core/framework/logging/LINGYUN.Abp.Logging.Serilog.Elasticsearch/LINGYUN/Abp/AuditLogging/Serilog/Elasticsearch/AbpLoggingSerilogElasticsearchMappers.cs @@ -42,9 +42,11 @@ public partial class SerilogInfoToLogInfoMapper : MapperBase + diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs index 79dba2c1c..40e470b75 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Configure.cs @@ -16,6 +16,7 @@ using Microsoft.AspNetCore.Cors; using Microsoft.AspNetCore.DataProtection; using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Routing; +using Microsoft.EntityFrameworkCore; using Microsoft.Extensions.Caching.StackExchangeRedis; using Microsoft.Extensions.Configuration; using Microsoft.Extensions.DependencyInjection; @@ -31,11 +32,11 @@ using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.AntiForgery; using Volo.Abp.Auditing; using Volo.Abp.Authorization.Permissions; using Volo.Abp.BlobStoring; using Volo.Abp.Caching; -using Volo.Abp.Data; using Volo.Abp.Domain.Entities.Events.Distributed; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.FeatureManagement; @@ -56,7 +57,7 @@ namespace LY.MicroService.AuthServer; public partial class AuthServerHttpApiHostModule { - public static string ApplicationName { get; set; } = "AuthService"; + public static string ApplicationName { get; set; } = "IdentityService"; private readonly static OneTimeRunner OneTimeRunner = new OneTimeRunner(); @@ -131,39 +132,9 @@ public partial class AuthServerHttpApiHostModule mysql => { // see: https://github.com/PomeloFoundation/Pomelo.EntityFrameworkCore.MySql/issues/1960 - mysql.TranslateParameterizedCollectionsToConstants(); + mysql.UseParameterizedCollectionMode(ParameterTranslationMode.Constant); }); }); - - Configure(options => - { - options.Databases.Configure("Platform", database => - { - database.MapConnection("AbpSaas"); - database.MapConnection("Workflow"); - database.MapConnection("AppPlatform"); - database.MapConnection("TaskManagement"); - database.MapConnection("AbpAuditLogging"); - database.MapConnection("AbpTextTemplating"); - database.MapConnection("AbpSettingManagement"); - database.MapConnection("AbpFeatureManagement"); - database.MapConnection("AbpPermissionManagement"); - database.MapConnection("AbpLocalizationManagement"); - database.MapConnection("AbpDataProtectionManagement"); - }); - options.Databases.Configure("Identity", database => - { - database.MapConnection("AbpGdpr"); - database.MapConnection("AbpIdentity"); - database.MapConnection("AbpOpenIddict"); - database.MapConnection("AbpIdentityServer"); - }); - options.Databases.Configure("Realtime", database => - { - database.MapConnection("Notifications"); - database.MapConnection("MessageService"); - }); - }); } private void ConfigureJsonSerializer(IConfiguration configuration) @@ -261,8 +232,11 @@ public partial class AuthServerHttpApiHostModule var distributedLockEnabled = configuration["DistributedLock:IsEnabled"]; if (distributedLockEnabled.IsNullOrEmpty() || bool.Parse(distributedLockEnabled)) { - var redis = ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]); - services.AddSingleton(_ => new RedisDistributedSynchronizationProvider(redis.GetDatabase())); + services.AddSingleton(_ => + { + return new RedisDistributedSynchronizationProvider( + ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]).GetDatabase()); + }); } } @@ -474,14 +448,19 @@ public partial class AuthServerHttpApiHostModule } }); - if (!isDevelopment) + + Configure(options => { - var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); - services - .AddDataProtection() - .SetApplicationName("LINGYUN.Abp.Application") - .PersistKeysToStackExchangeRedis(redis, "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); - } + configuration.GetSection("AntiForgery").Bind(options); + }); + + services.AddDataProtection() + .SetApplicationName("LINGYUN.Abp.Application") + .PersistKeysToStackExchangeRedis(() => + { + return ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]).GetDatabase(); + }, + "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); } private void ConfigureWrapper() diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Seeder.cs b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Seeder.cs deleted file mode 100644 index 74287a754..000000000 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/AuthServerHttpApiHostModule.Seeder.cs +++ /dev/null @@ -1,10 +0,0 @@ -using System; -using System.Collections.Generic; -using System.Linq; -using System.Threading.Tasks; - -namespace LY.MicroService.AuthServer; - -public partial class AuthServerHttpApiHostModule -{ -} diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.Development.json b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.Development.json index b2a92de2e..7ba739320 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.Development.json @@ -4,28 +4,28 @@ "env": "DEV", "appId": "LINGYUN.Abp.AuthServer.Admin", "secret": "1q2w3E*", - "nodes": "http://127.0.0.1:5000", + "nodes": "http://localhost:5000", "name": "AuthServer.Admin", "tag": "AuthServer.Admin", "configCacheEncrypt": true }, "App": { "ShowPii": true, - "CorsOrigins": [ "http://127.0.0.1:5666" ], + "CorsOrigins": [ "http://localhost:5666" ], "Urls": { "Applications": { "MVC": { - "RootUrl": "http://127.0.0.1:44385/", + "RootUrl": "http://localhost:44385/", "Urls": { "Abp.Account.EmailConfirm": "Account/EmailConfirm", "Abp.Account.EmailVerifyLogin": "Account/VerifyCode" } }, "STS": { - "RootUrl": "http://127.0.0.1:44385/" + "RootUrl": "http://localhost:44385/" }, "VueVbenAdmin": { - "RootUrl": "http://127.0.0.1:3100/", + "RootUrl": "http://localhost:3100/", "Urls": { "Abp.Account.EmailConfirm": "account/email-confirm", "Abp.Account.EmailVerifyLogin": "account/verify-code" @@ -46,10 +46,7 @@ } }, "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "CAP": { "EventBus": { @@ -61,10 +58,10 @@ }, "MySql": { "TableNamePrefix": "ida", - "ConnectionString": "Server=127.0.0.1;Database=AuthServer-v70;User Id=root;Password=123456;SslMode=None" + "ConnectionString": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "RabbitMQ": { - "HostName": "127.0.0.1", + "HostName": "localhost", "Port": 5672, "UserName": "admin", "Password": "123456", @@ -75,22 +72,23 @@ "DistributedLock": { "IsEnabled": true, "Redis": { - "Configuration": "127.0.0.1,defaultDatabase=13" + "Configuration": "localhost,defaultDatabase=13" } }, "Redis": { - "Configuration": "127.0.0.1,defaultDatabase=10", + "Configuration": "localhost,defaultDatabase=10", "InstanceName": "LINGYUN.Abp.Application" }, "RemoteServices": { "Platform": { - "BaseUrl": "http://127.0.0.1:30025", + "BaseUrl": "http://localhost:30025", "UseCurrentAccessToken": false } }, "AuthServer": { - "Authority": "http://127.0.0.1:44385", - "Audience": "lingyun-abp-application", + "Authority": "http://localhost:44385", + "Audience": "identity-service", + "ValidAudiences": [ "lingyun-abp-application" ], "MapInboundClaims": false, "RequireHttpsMetadata": false, "SwaggerClientId": "vue-oauth-client" @@ -101,7 +99,7 @@ } }, "Elasticsearch": { - "NodeUris": "http://127.0.0.1:9200" + "NodeUris": "http://localhost:9200" }, "Serilog": { "MinimumLevel": { @@ -109,6 +107,7 @@ "Override": { "System": "Information", "Microsoft": "Information", + "Microsoft.EntityFrameworkCore": "Warning", "DotNetCore": "Warning" } }, @@ -123,7 +122,7 @@ { "Name": "Elasticsearch", "Args": { - "nodeUris": "http://127.0.0.1:9200", + "nodeUris": "http://localhost:9200", "indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", "autoRegisterTemplate": true, "autoRegisterTemplateVersion": "ESv7" diff --git a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.json b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.json index 141b39b93..afc6c0e68 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.json +++ b/aspnet-core/services/LY.MicroService.AuthServer.HttpApi.Host/appsettings.json @@ -5,8 +5,11 @@ "Forwarded": { "ForwardedHeaders": "XForwardedFor,XForwardedProto" }, + "AntiForgery": { + "AutoValidate": false + }, "App": { - "CorsOrigins": "http://localhost:3100" + "CorsOrigins": ["http://localhost:30000"] }, "StringEncryption": { "DefaultPassPhrase": "s46c5q55nxpeS8Ra", diff --git a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs index 2f35fc664..70c4577c3 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs +++ b/aspnet-core/services/LY.MicroService.AuthServer/AuthServerModule.Configure.cs @@ -39,6 +39,8 @@ using System.Text.Encodings.Web; using System.Text.Unicode; using Volo.Abp.Account.Localization; using Volo.Abp.AspNetCore.Mvc; +using Volo.Abp.AspNetCore.Mvc.UI.Bundling; +using Volo.Abp.AspNetCore.Mvc.UI.Theme.LeptonXLite.Bundling; using Volo.Abp.Auditing; using Volo.Abp.BlobStoring; using Volo.Abp.Caching; @@ -179,6 +181,15 @@ public partial class AuthServerModule }); }); + Configure(options => + { + options.StyleBundles + .Configure(LeptonXLiteThemeBundles.Styles.Global, bundle => + { + bundle.AddFiles("/css/global-styles.css"); + }); + }); + services.AddHealthChecks(); } @@ -226,8 +237,11 @@ public partial class AuthServerModule var distributedLockEnabled = configuration["DistributedLock:IsEnabled"]; if (distributedLockEnabled.IsNullOrEmpty() || bool.Parse(distributedLockEnabled)) { - var redis = ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]); - services.AddSingleton(_ => new RedisDistributedSynchronizationProvider(redis.GetDatabase())); + services.AddSingleton(_ => + { + return new RedisDistributedSynchronizationProvider( + ConnectionMultiplexer.Connect(configuration["DistributedLock:Redis:Configuration"]).GetDatabase()); + }); } } @@ -407,19 +421,19 @@ public partial class AuthServerModule options.TokenValidationParameters.IssuerValidator = TokenWildcardIssuerValidator.IssuerValidator; } }); - //.AddWeChatWork(options => - //{ - // options.SignInScheme = IdentityConstants.ExternalScheme; - //}); - - if (!isDevelopment) - { - var redis = ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]); - services - .AddDataProtection() - .SetApplicationName("LINGYUN.Abp.Application") - .PersistKeysToStackExchangeRedis(redis, "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); - } + //.AddWeChatWork(options => + //{ + // options.SignInScheme = IdentityConstants.ExternalScheme; + //}); + + services.AddDataProtection() + .SetApplicationName("LINGYUN.Abp.Application") + .PersistKeysToStackExchangeRedis(() => + { + return ConnectionMultiplexer.Connect(configuration["Redis:Configuration"]).GetDatabase(); + }, + "LINGYUN.Abp.Application:DataProtection:Protection-Keys"); + services.AddSameSiteCookiePolicy(); } private void ConfigureMultiTenancy(IConfiguration configuration) diff --git a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj index 294786ada..8d785dcde 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj +++ b/aspnet-core/services/LY.MicroService.AuthServer/LY.MicroService.AuthServer.csproj @@ -81,8 +81,4 @@ - - - - diff --git a/aspnet-core/services/LY.MicroService.AuthServer/Properties/launchSettings.json b/aspnet-core/services/LY.MicroService.AuthServer/Properties/launchSettings.json index d4157f0ef..be15db1ca 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/Properties/launchSettings.json +++ b/aspnet-core/services/LY.MicroService.AuthServer/Properties/launchSettings.json @@ -7,7 +7,7 @@ "environmentVariables": { "ASPNETCORE_ENVIRONMENT": "Development" }, - "applicationUrl": "http://127.0.0.1:44385;https://127.0.0.1:44386" + "applicationUrl": "http://localhost:44385;https://localhost:44386" } } } \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/appsettings.Development.json b/aspnet-core/services/LY.MicroService.AuthServer/appsettings.Development.json index 351eae675..6ce89b28b 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/appsettings.Development.json +++ b/aspnet-core/services/LY.MicroService.AuthServer/appsettings.Development.json @@ -4,38 +4,39 @@ "env": "DEV", "appId": "LINGYUN.Abp.AuthServer", "secret": "1q2w3E*", - "nodes": "http://127.0.0.1:15000", + "nodes": "http://localhost:15000", "name": "AuthServer", "tag": "AuthServer", "configCacheEncrypt": true }, "App": { "CorsOrigins": [ - "http://127.0.0.1:5666", - "http://127.0.0.1:30010", - "http://127.0.0.1:30015", - "http://127.0.0.1:30020", - "http://127.0.0.1:30025", - "http://127.0.0.1:30030", - "http://127.0.0.1:30040", - "http://127.0.0.1:30045", - "http://127.0.0.1:30050", - "http://127.0.0.1:30060" + "http://localhost:5666", + "http://localhost:30000", + "http://localhost:30010", + "http://localhost:30015", + "http://localhost:30020", + "http://localhost:30025", + "http://localhost:30030", + "http://localhost:30040", + "http://localhost:30045", + "http://localhost:30050", + "http://localhost:30060" ], "Urls": { "Applications": { "MVC": { - "RootUrl": "http://127.0.0.1:44385/", + "RootUrl": "http://localhost:44385/", "Urls": { "Abp.Account.EmailConfirm": "Account/EmailConfirm", "Abp.Account.EmailVerifyLogin": "Account/VerifyCode" } }, "STS": { - "RootUrl": "http://127.0.0.1:44385/" + "RootUrl": "http://localhost:44385/" }, "VueVbenAdmin": { - "RootUrl": "http://127.0.0.1:5666/", + "RootUrl": "http://localhost:5666/", "Urls": { "Abp.Account.EmailConfirm": "account/email-confirm", "Abp.Account.EmailVerifyLogin": "account/verify-code" @@ -56,10 +57,7 @@ } }, "ConnectionStrings": { - "Default": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Platform": "Server=127.0.0.1;Database=Platform-v70;User Id=root;Password=123456;SslMode=None", - "Identity": "Server=127.0.0.1;Database=AuthServer-V70;User Id=root;Password=123456;SslMode=None", - "Realtime": "Server=127.0.0.1;Database=Messages-V70;User Id=root;Password=123456;SslMode=None" + "Default": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "CAP": { "EventBus": { @@ -71,10 +69,10 @@ }, "MySql": { "TableNamePrefix": "auth", - "ConnectionString": "Server=127.0.0.1;Database=AuthServer-v70;User Id=root;Password=123456;SslMode=None" + "ConnectionString": "Server=localhost;Database=abp;User Id=root;Password=123456;SslMode=None" }, "RabbitMQ": { - "HostName": "127.0.0.1", + "HostName": "localhost", "Port": 5672, "UserName": "admin", "Password": "123456", @@ -85,22 +83,23 @@ "DistributedLock": { "IsEnabled": true, "Redis": { - "Configuration": "127.0.0.1,defaultDatabase=13" + "Configuration": "localhost,defaultDatabase=13" } }, "Redis": { - "Configuration": "127.0.0.1,defaultDatabase=10", + "Configuration": "localhost,defaultDatabase=10", "InstanceName": "LINGYUN.Abp.Application" }, "RemoteServices": { "Platform": { - "BaseUrl": "http://127.0.0.1:30025", + "BaseUrl": "http://localhost:30025", "UseCurrentAccessToken": false } }, "AuthServer": { - "Authority": "http://127.0.0.1:44385/", - "Audience": "lingyun-abp-application", + "Authority": "http://localhost:44385/", + "Audience": "auth-server", + "ValidAudiences": [ "lingyun-abp-application" ], "MapInboundClaims": false, "RequireHttpsMetadata": false }, @@ -109,7 +108,7 @@ "VueAdmin": { "ClientId": "vue-admin-client", "ClientSecret": "1q2w3e*", - "RootUrl": "http://127.0.0.1:5666/" + "RootUrl": "http://localhost:5666/" }, "InternalService": { "ClientId": "InternalServiceClient", @@ -118,16 +117,16 @@ "VueOAuthClient": { "ClientId": "vue-oauth-client", "RootUrls": [ - "http://127.0.0.1:5666", - "http://127.0.0.1:30010", - "http://127.0.0.1:30015", - "http://127.0.0.1:30020", - "http://127.0.0.1:30025", - "http://127.0.0.1:30030", - "http://127.0.0.1:30040", - "http://127.0.0.1:30045", - "http://127.0.0.1:30050", - "http://127.0.0.1:30060" + "http://localhost:5666", + "http://localhost:30010", + "http://localhost:30015", + "http://localhost:30020", + "http://localhost:30025", + "http://localhost:30030", + "http://localhost:30040", + "http://localhost:30045", + "http://localhost:30050", + "http://localhost:30060" ] } } @@ -157,7 +156,7 @@ } }, "Elasticsearch": { - "NodeUris": "http://127.0.0.1:9200" + "NodeUris": "http://localhost:9200" }, "Serilog": { "MinimumLevel": { @@ -179,7 +178,7 @@ { "Name": "Elasticsearch", "Args": { - "nodeUris": "http://127.0.0.1:9200", + "nodeUris": "http://localhost:9200", "indexFormat": "abp.dev.logging-{0:yyyy.MM.dd}", "autoRegisterTemplate": true, "autoRegisterTemplateVersion": "ESv7" diff --git a/aspnet-core/services/LY.MicroService.AuthServer/package.json b/aspnet-core/services/LY.MicroService.AuthServer/package.json index b8bcac801..8f74f021a 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/package.json +++ b/aspnet-core/services/LY.MicroService.AuthServer/package.json @@ -1,9 +1,9 @@ { - "version": "9.3.5", + "version": "10.2.0", "name": "my-app-authserver", "private": true, "dependencies": { - "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "4.3.5", - "@abp/qrcode": "9.3.5" + "@abp/aspnetcore.mvc.ui.theme.leptonxlite": "5.2.0", + "@abp/qrcode": "10.2.0" } } \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/css/global-styles.css b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/css/global-styles.css new file mode 100644 index 000000000..10d251425 --- /dev/null +++ b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/css/global-styles.css @@ -0,0 +1,9 @@ +.account-module-form { + padding: 24px; + border: 0; + background: #fff; + color: #000; + box-shadow: 0 0 30px rgba(8, 20, 73, .1); + border-radius: 4px; + margin-top: 0.75rem !important; +} diff --git a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css index ffdf0f023..8f976819d 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css +++ b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/all.css @@ -1,139 +1,187 @@ /*! - * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com + * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. + * Copyright 2026 Fonticons, Inc. */ -.fa { - font-family: var(--fa-style-family, "Font Awesome 6 Free"); - font-weight: var(--fa-style, 900); } - -.fas, -.far, -.fab, .fa-solid, .fa-regular, .fa-brands, +.fa-classic, +.fas, +.far, +.fab, .fa { - -moz-osx-font-smoothing: grayscale; + --_fa-family: var(--fa-family, var(--fa-style-family, 'Font Awesome 7 Free')); -webkit-font-smoothing: antialiased; + -moz-osx-font-smoothing: grayscale; display: var(--fa-display, inline-block); + font-family: var(--_fa-family); + font-feature-settings: normal; font-style: normal; + font-synthesis: none; font-variant: normal; + font-weight: var(--fa-style, 900); line-height: 1; - text-rendering: auto; } - -.fas::before, -.far::before, -.fab::before, -.fa-solid::before, -.fa-regular::before, -.fa-brands::before, -.fa::before { - content: var(--fa); } + text-align: center; + text-rendering: auto; + width: var(--fa-width, 1.25em); +} -.fa-classic, -.fas, -.fa-solid, +:is(.fas, .far, -.fa-regular { - font-family: 'Font Awesome 6 Free'; } - +.fab, +.fa-solid, +.fa-regular, .fa-brands, -.fab { - font-family: 'Font Awesome 6 Brands'; } - +.fa-classic, +.fa)::before { + content: var(--fa)/""; +} + +@supports not (content: ""/"") { + :is(.fas, + .far, + .fab, + .fa-solid, + .fa-regular, + .fa-brands, + .fa-classic, + .fa)::before { + content: var(--fa); + } +} .fa-1x { - font-size: 1em; } + font-size: 1em; +} .fa-2x { - font-size: 2em; } + font-size: 2em; +} .fa-3x { - font-size: 3em; } + font-size: 3em; +} .fa-4x { - font-size: 4em; } + font-size: 4em; +} .fa-5x { - font-size: 5em; } + font-size: 5em; +} .fa-6x { - font-size: 6em; } + font-size: 6em; +} .fa-7x { - font-size: 7em; } + font-size: 7em; +} .fa-8x { - font-size: 8em; } + font-size: 8em; +} .fa-9x { - font-size: 9em; } + font-size: 9em; +} .fa-10x { - font-size: 10em; } + font-size: 10em; +} .fa-2xs { - font-size: 0.625em; - line-height: 0.1em; - vertical-align: 0.225em; } + font-size: calc(10 / 16 * 1em); /* converts a 10px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 10 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 10 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} .fa-xs { - font-size: 0.75em; - line-height: 0.08333em; - vertical-align: 0.125em; } + font-size: calc(12 / 16 * 1em); /* converts a 12px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 12 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 12 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} .fa-sm { - font-size: 0.875em; - line-height: 0.07143em; - vertical-align: 0.05357em; } + font-size: calc(14 / 16 * 1em); /* converts a 14px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 14 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 14 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} .fa-lg { - font-size: 1.25em; - line-height: 0.05em; - vertical-align: -0.075em; } + font-size: calc(20 / 16 * 1em); /* converts a 20px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 20 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 20 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} .fa-xl { - font-size: 1.5em; - line-height: 0.04167em; - vertical-align: -0.125em; } + font-size: calc(24 / 16 * 1em); /* converts a 24px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 24 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 24 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} .fa-2xl { - font-size: 2em; - line-height: 0.03125em; - vertical-align: -0.1875em; } + font-size: calc(32 / 16 * 1em); /* converts a 32px size into an em-based value that's relative to the scale's 16px base */ + line-height: calc(1 / 32 * 1em); /* sets the line-height of the icon back to that of it's parent */ + vertical-align: calc((6 / 32 - 0.375) * 1em); /* vertically centers the icon taking into account the surrounding text's descender */ +} -.fa-fw { - text-align: center; - width: 1.25em; } +.fa-width-auto { + --fa-width: auto; +} + +.fa-fw, +.fa-width-fixed { + --fa-width: 1.25em; +} .fa-ul { list-style-type: none; - margin-left: var(--fa-li-margin, 2.5em); - padding-left: 0; } - .fa-ul > li { - position: relative; } + margin-inline-start: var(--fa-li-margin, 2.5em); + padding-inline-start: 0; +} +.fa-ul > li { + position: relative; +} .fa-li { - left: calc(-1 * var(--fa-li-width, 2em)); + inset-inline-start: calc(-1 * var(--fa-li-width, 2em)); position: absolute; text-align: center; width: var(--fa-li-width, 2em); - line-height: inherit; } - + line-height: inherit; +} + +/* Heads Up: Bordered Icons will not be supported in the future! + - This feature will be deprecated in the next major release of Font Awesome (v8)! + - You may continue to use it in this version *v7), but it will not be supported in Font Awesome v8. +*/ +/* Notes: +* --@{v.$css-prefix}-border-width = 1/16 by default (to render as ~1px based on a 16px default font-size) +* --@{v.$css-prefix}-border-padding = + ** 3/16 for vertical padding (to give ~2px of vertical whitespace around an icon considering it's vertical alignment) + ** 4/16 for horizontal padding (to give ~4px of horizontal whitespace around an icon) +*/ .fa-border { border-color: var(--fa-border-color, #eee); border-radius: var(--fa-border-radius, 0.1em); border-style: var(--fa-border-style, solid); - border-width: var(--fa-border-width, 0.08em); - padding: var(--fa-border-padding, 0.2em 0.25em 0.15em); } - -.fa-pull-left { - float: left; - margin-right: var(--fa-pull-margin, 0.3em); } - -.fa-pull-right { - float: right; - margin-left: var(--fa-pull-margin, 0.3em); } + border-width: var(--fa-border-width, 0.0625em); + box-sizing: var(--fa-border-box-sizing, content-box); + padding: var(--fa-border-padding, 0.1875em 0.25em); +} + +.fa-pull-left, +.fa-pull-start { + float: inline-start; + margin-inline-end: var(--fa-pull-margin, 0.3em); +} + +.fa-pull-right, +.fa-pull-end { + float: inline-end; + margin-inline-start: var(--fa-pull-margin, 0.3em); +} .fa-beat { animation-name: fa-beat; @@ -141,7 +189,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} .fa-bounce { animation-name: fa-bounce; @@ -149,7 +198,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); } + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.28, 0.84, 0.42, 1)); +} .fa-fade { animation-name: fa-fade; @@ -157,7 +207,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} .fa-beat-fade { animation-name: fa-beat-fade; @@ -165,7 +216,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); } + animation-timing-function: var(--fa-animation-timing, cubic-bezier(0.4, 0, 0.6, 1)); +} .fa-flip { animation-name: fa-flip; @@ -173,7 +225,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, ease-in-out); } + animation-timing-function: var(--fa-animation-timing, ease-in-out); +} .fa-shake { animation-name: fa-shake; @@ -181,7 +234,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, linear); } + animation-timing-function: var(--fa-animation-timing, linear); +} .fa-spin { animation-name: fa-spin; @@ -189,10 +243,12 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 2s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, linear); } + animation-timing-function: var(--fa-animation-timing, linear); +} .fa-spin-reverse { - --fa-animation-direction: reverse; } + --fa-animation-direction: reverse; +} .fa-pulse, .fa-spin-pulse { @@ -200,7 +256,8 @@ animation-direction: var(--fa-animation-direction, normal); animation-duration: var(--fa-animation-duration, 1s); animation-iteration-count: var(--fa-animation-iteration-count, infinite); - animation-timing-function: var(--fa-animation-timing, steps(8)); } + animation-timing-function: var(--fa-animation-timing, steps(8)); +} @media (prefers-reduced-motion: reduce) { .fa-beat, @@ -212,97 +269,126 @@ .fa-shake, .fa-spin, .fa-spin-pulse { - animation-delay: -1ms; - animation-duration: 1ms; - animation-iteration-count: 1; - transition-delay: 0s; - transition-duration: 0s; } } - + animation: none !important; + transition: none !important; + } +} @keyframes fa-beat { 0%, 90% { - transform: scale(1); } + transform: scale(1); + } 45% { - transform: scale(var(--fa-beat-scale, 1.25)); } } - + transform: scale(var(--fa-beat-scale, 1.25)); + } +} @keyframes fa-bounce { 0% { - transform: scale(1, 1) translateY(0); } + transform: scale(1, 1) translateY(0); + } 10% { - transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); } + transform: scale(var(--fa-bounce-start-scale-x, 1.1), var(--fa-bounce-start-scale-y, 0.9)) translateY(0); + } 30% { - transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); } + transform: scale(var(--fa-bounce-jump-scale-x, 0.9), var(--fa-bounce-jump-scale-y, 1.1)) translateY(var(--fa-bounce-height, -0.5em)); + } 50% { - transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); } + transform: scale(var(--fa-bounce-land-scale-x, 1.05), var(--fa-bounce-land-scale-y, 0.95)) translateY(0); + } 57% { - transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); } + transform: scale(1, 1) translateY(var(--fa-bounce-rebound, -0.125em)); + } 64% { - transform: scale(1, 1) translateY(0); } + transform: scale(1, 1) translateY(0); + } 100% { - transform: scale(1, 1) translateY(0); } } - + transform: scale(1, 1) translateY(0); + } +} @keyframes fa-fade { 50% { - opacity: var(--fa-fade-opacity, 0.4); } } - + opacity: var(--fa-fade-opacity, 0.4); + } +} @keyframes fa-beat-fade { 0%, 100% { opacity: var(--fa-beat-fade-opacity, 0.4); - transform: scale(1); } + transform: scale(1); + } 50% { opacity: 1; - transform: scale(var(--fa-beat-fade-scale, 1.125)); } } - + transform: scale(var(--fa-beat-fade-scale, 1.125)); + } +} @keyframes fa-flip { 50% { - transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); } } - + transform: rotate3d(var(--fa-flip-x, 0), var(--fa-flip-y, 1), var(--fa-flip-z, 0), var(--fa-flip-angle, -180deg)); + } +} @keyframes fa-shake { 0% { - transform: rotate(-15deg); } + transform: rotate(-15deg); + } 4% { - transform: rotate(15deg); } + transform: rotate(15deg); + } 8%, 24% { - transform: rotate(-18deg); } + transform: rotate(-18deg); + } 12%, 28% { - transform: rotate(18deg); } + transform: rotate(18deg); + } 16% { - transform: rotate(-22deg); } + transform: rotate(-22deg); + } 20% { - transform: rotate(22deg); } + transform: rotate(22deg); + } 32% { - transform: rotate(-12deg); } + transform: rotate(-12deg); + } 36% { - transform: rotate(12deg); } + transform: rotate(12deg); + } 40%, 100% { - transform: rotate(0deg); } } - + transform: rotate(0deg); + } +} @keyframes fa-spin { 0% { - transform: rotate(0deg); } + transform: rotate(0deg); + } 100% { - transform: rotate(360deg); } } - + transform: rotate(360deg); + } +} .fa-rotate-90 { - transform: rotate(90deg); } + transform: rotate(90deg); +} .fa-rotate-180 { - transform: rotate(180deg); } + transform: rotate(180deg); +} .fa-rotate-270 { - transform: rotate(270deg); } + transform: rotate(270deg); +} .fa-flip-horizontal { - transform: scale(-1, 1); } + transform: scale(-1, 1); +} .fa-flip-vertical { - transform: scale(1, -1); } + transform: scale(1, -1); +} .fa-flip-both, .fa-flip-horizontal.fa-flip-vertical { - transform: scale(-1, -1); } + transform: scale(-1, -1); +} .fa-rotate-by { - transform: rotate(var(--fa-rotate-angle, 0)); } + transform: rotate(var(--fa-rotate-angle, 0)); +} .fa-stack { display: inline-block; @@ -310,7604 +396,10484 @@ line-height: 2em; position: relative; vertical-align: middle; - width: 2.5em; } + width: 2.5em; +} .fa-stack-1x, .fa-stack-2x { - left: 0; + --fa-width: 100%; + inset: 0; position: absolute; text-align: center; - width: 100%; - z-index: var(--fa-stack-z-index, auto); } + width: var(--fa-width); + z-index: var(--fa-stack-z-index, auto); +} .fa-stack-1x { - line-height: inherit; } + line-height: inherit; +} .fa-stack-2x { - font-size: 2em; } + font-size: 2em; +} .fa-inverse { - color: var(--fa-inverse, #fff); } + color: var(--fa-inverse, #fff); +} /* Font Awesome uses the Unicode Private Use Area (PUA) to ensure screen -readers do not read off random characters that represent icons */ + readers do not read off random characters that represent icons */ .fa-0 { - --fa: "\30"; } + --fa: "\30 "; +} .fa-1 { - --fa: "\31"; } + --fa: "\31 "; +} .fa-2 { - --fa: "\32"; } + --fa: "\32 "; +} .fa-3 { - --fa: "\33"; } + --fa: "\33 "; +} .fa-4 { - --fa: "\34"; } + --fa: "\34 "; +} .fa-5 { - --fa: "\35"; } + --fa: "\35 "; +} .fa-6 { - --fa: "\36"; } + --fa: "\36 "; +} .fa-7 { - --fa: "\37"; } + --fa: "\37 "; +} .fa-8 { - --fa: "\38"; } + --fa: "\38 "; +} .fa-9 { - --fa: "\39"; } + --fa: "\39 "; +} -.fa-fill-drip { - --fa: "\f576"; } - -.fa-arrows-to-circle { - --fa: "\e4bd"; } +.fa-exclamation { + --fa: "\!"; +} -.fa-circle-chevron-right { - --fa: "\f138"; } +.fa-hashtag { + --fa: "\#"; +} -.fa-chevron-circle-right { - --fa: "\f138"; } +.fa-dollar-sign { + --fa: "\$"; +} -.fa-at { - --fa: "\40"; } +.fa-dollar { + --fa: "\$"; +} -.fa-trash-can { - --fa: "\f2ed"; } +.fa-usd { + --fa: "\$"; +} -.fa-trash-alt { - --fa: "\f2ed"; } +.fa-percent { + --fa: "\%"; +} -.fa-text-height { - --fa: "\f034"; } +.fa-percentage { + --fa: "\%"; +} -.fa-user-xmark { - --fa: "\f235"; } +.fa-asterisk { + --fa: "\*"; +} -.fa-user-times { - --fa: "\f235"; } +.fa-plus { + --fa: "\+"; +} -.fa-stethoscope { - --fa: "\f0f1"; } +.fa-add { + --fa: "\+"; +} -.fa-message { - --fa: "\f27a"; } +.fa-less-than { + --fa: "\<"; +} -.fa-comment-alt { - --fa: "\f27a"; } +.fa-equals { + --fa: "\="; +} -.fa-info { - --fa: "\f129"; } +.fa-greater-than { + --fa: "\>"; +} -.fa-down-left-and-up-right-to-center { - --fa: "\f422"; } +.fa-question { + --fa: "\?"; +} -.fa-compress-alt { - --fa: "\f422"; } +.fa-at { + --fa: "\@"; +} -.fa-explosion { - --fa: "\e4e9"; } +.fa-a { + --fa: "A"; +} -.fa-file-lines { - --fa: "\f15c"; } +.fa-b { + --fa: "B"; +} -.fa-file-alt { - --fa: "\f15c"; } +.fa-c { + --fa: "C"; +} -.fa-file-text { - --fa: "\f15c"; } +.fa-d { + --fa: "D"; +} -.fa-wave-square { - --fa: "\f83e"; } +.fa-e { + --fa: "E"; +} -.fa-ring { - --fa: "\f70b"; } +.fa-f { + --fa: "F"; +} -.fa-building-un { - --fa: "\e4d9"; } +.fa-g { + --fa: "G"; +} -.fa-dice-three { - --fa: "\f527"; } +.fa-h { + --fa: "H"; +} -.fa-calendar-days { - --fa: "\f073"; } +.fa-i { + --fa: "I"; +} -.fa-calendar-alt { - --fa: "\f073"; } +.fa-j { + --fa: "J"; +} -.fa-anchor-circle-check { - --fa: "\e4aa"; } +.fa-k { + --fa: "K"; +} -.fa-building-circle-arrow-right { - --fa: "\e4d1"; } +.fa-l { + --fa: "L"; +} -.fa-volleyball { - --fa: "\f45f"; } +.fa-m { + --fa: "M"; +} -.fa-volleyball-ball { - --fa: "\f45f"; } +.fa-n { + --fa: "N"; +} -.fa-arrows-up-to-line { - --fa: "\e4c2"; } +.fa-o { + --fa: "O"; +} -.fa-sort-down { - --fa: "\f0dd"; } +.fa-p { + --fa: "P"; +} -.fa-sort-desc { - --fa: "\f0dd"; } +.fa-q { + --fa: "Q"; +} -.fa-circle-minus { - --fa: "\f056"; } +.fa-r { + --fa: "R"; +} -.fa-minus-circle { - --fa: "\f056"; } +.fa-s { + --fa: "S"; +} -.fa-door-open { - --fa: "\f52b"; } +.fa-t { + --fa: "T"; +} -.fa-right-from-bracket { - --fa: "\f2f5"; } +.fa-u { + --fa: "U"; +} -.fa-sign-out-alt { - --fa: "\f2f5"; } +.fa-v { + --fa: "V"; +} -.fa-atom { - --fa: "\f5d2"; } +.fa-w { + --fa: "W"; +} -.fa-soap { - --fa: "\e06e"; } +.fa-x { + --fa: "X"; +} -.fa-icons { - --fa: "\f86d"; } +.fa-y { + --fa: "Y"; +} -.fa-heart-music-camera-bolt { - --fa: "\f86d"; } +.fa-z { + --fa: "Z"; +} -.fa-microphone-lines-slash { - --fa: "\f539"; } +.fa-faucet { + --fa: "\e005"; +} -.fa-microphone-alt-slash { - --fa: "\f539"; } +.fa-faucet-drip { + --fa: "\e006"; +} -.fa-bridge-circle-check { - --fa: "\e4c9"; } +.fa-house-chimney-window { + --fa: "\e00d"; +} -.fa-pump-medical { - --fa: "\e06a"; } +.fa-house-signal { + --fa: "\e012"; +} -.fa-fingerprint { - --fa: "\f577"; } +.fa-temperature-arrow-down { + --fa: "\e03f"; +} -.fa-hand-point-right { - --fa: "\f0a4"; } +.fa-temperature-down { + --fa: "\e03f"; +} -.fa-magnifying-glass-location { - --fa: "\f689"; } +.fa-temperature-arrow-up { + --fa: "\e040"; +} -.fa-search-location { - --fa: "\f689"; } +.fa-temperature-up { + --fa: "\e040"; +} -.fa-forward-step { - --fa: "\f051"; } +.fa-trailer { + --fa: "\e041"; +} -.fa-step-forward { - --fa: "\f051"; } +.fa-bacteria { + --fa: "\e059"; +} -.fa-face-smile-beam { - --fa: "\f5b8"; } +.fa-bacterium { + --fa: "\e05a"; +} -.fa-smile-beam { - --fa: "\f5b8"; } +.fa-box-tissue { + --fa: "\e05b"; +} -.fa-flag-checkered { - --fa: "\f11e"; } +.fa-hand-holding-medical { + --fa: "\e05c"; +} -.fa-football { - --fa: "\f44e"; } +.fa-hand-sparkles { + --fa: "\e05d"; +} -.fa-football-ball { - --fa: "\f44e"; } +.fa-hands-bubbles { + --fa: "\e05e"; +} -.fa-school-circle-exclamation { - --fa: "\e56c"; } +.fa-hands-wash { + --fa: "\e05e"; +} -.fa-crop { - --fa: "\f125"; } +.fa-handshake-slash { + --fa: "\e060"; +} -.fa-angles-down { - --fa: "\f103"; } +.fa-handshake-alt-slash { + --fa: "\e060"; +} -.fa-angle-double-down { - --fa: "\f103"; } +.fa-handshake-simple-slash { + --fa: "\e060"; +} -.fa-users-rectangle { - --fa: "\e594"; } +.fa-head-side-cough { + --fa: "\e061"; +} -.fa-people-roof { - --fa: "\e537"; } +.fa-head-side-cough-slash { + --fa: "\e062"; +} -.fa-people-line { - --fa: "\e534"; } +.fa-head-side-mask { + --fa: "\e063"; +} -.fa-beer-mug-empty { - --fa: "\f0fc"; } +.fa-head-side-virus { + --fa: "\e064"; +} -.fa-beer { - --fa: "\f0fc"; } +.fa-house-chimney-user { + --fa: "\e065"; +} -.fa-diagram-predecessor { - --fa: "\e477"; } +.fa-house-laptop { + --fa: "\e066"; +} -.fa-arrow-up-long { - --fa: "\f176"; } +.fa-laptop-house { + --fa: "\e066"; +} -.fa-long-arrow-up { - --fa: "\f176"; } +.fa-lungs-virus { + --fa: "\e067"; +} -.fa-fire-flame-simple { - --fa: "\f46a"; } +.fa-people-arrows { + --fa: "\e068"; +} -.fa-burn { - --fa: "\f46a"; } +.fa-people-arrows-left-right { + --fa: "\e068"; +} -.fa-person { - --fa: "\f183"; } +.fa-plane-slash { + --fa: "\e069"; +} -.fa-male { - --fa: "\f183"; } +.fa-pump-medical { + --fa: "\e06a"; +} -.fa-laptop { - --fa: "\f109"; } +.fa-pump-soap { + --fa: "\e06b"; +} -.fa-file-csv { - --fa: "\f6dd"; } +.fa-shield-virus { + --fa: "\e06c"; +} -.fa-menorah { - --fa: "\f676"; } +.fa-sink { + --fa: "\e06d"; +} -.fa-truck-plane { - --fa: "\e58f"; } +.fa-soap { + --fa: "\e06e"; +} -.fa-record-vinyl { - --fa: "\f8d9"; } +.fa-stopwatch-20 { + --fa: "\e06f"; +} -.fa-face-grin-stars { - --fa: "\f587"; } +.fa-shop-slash { + --fa: "\e070"; +} -.fa-grin-stars { - --fa: "\f587"; } +.fa-store-alt-slash { + --fa: "\e070"; +} -.fa-bong { - --fa: "\f55c"; } +.fa-store-slash { + --fa: "\e071"; +} -.fa-spaghetti-monster-flying { - --fa: "\f67b"; } +.fa-toilet-paper-slash { + --fa: "\e072"; +} -.fa-pastafarianism { - --fa: "\f67b"; } +.fa-users-slash { + --fa: "\e073"; +} -.fa-arrow-down-up-across-line { - --fa: "\e4af"; } +.fa-virus { + --fa: "\e074"; +} -.fa-spoon { - --fa: "\f2e5"; } +.fa-virus-slash { + --fa: "\e075"; +} -.fa-utensil-spoon { - --fa: "\f2e5"; } +.fa-viruses { + --fa: "\e076"; +} -.fa-jar-wheat { - --fa: "\e517"; } +.fa-vest { + --fa: "\e085"; +} -.fa-envelopes-bulk { - --fa: "\f674"; } +.fa-vest-patches { + --fa: "\e086"; +} -.fa-mail-bulk { - --fa: "\f674"; } +.fa-arrow-trend-down { + --fa: "\e097"; +} -.fa-file-circle-exclamation { - --fa: "\e4eb"; } +.fa-arrow-trend-up { + --fa: "\e098"; +} -.fa-circle-h { - --fa: "\f47e"; } +.fa-arrow-up-from-bracket { + --fa: "\e09a"; +} -.fa-hospital-symbol { - --fa: "\f47e"; } +.fa-austral-sign { + --fa: "\e0a9"; +} -.fa-pager { - --fa: "\f815"; } +.fa-baht-sign { + --fa: "\e0ac"; +} -.fa-address-book { - --fa: "\f2b9"; } +.fa-bitcoin-sign { + --fa: "\e0b4"; +} -.fa-contact-book { - --fa: "\f2b9"; } +.fa-bolt-lightning { + --fa: "\e0b7"; +} -.fa-strikethrough { - --fa: "\f0cc"; } +.fa-book-bookmark { + --fa: "\e0bb"; +} -.fa-k { - --fa: "\4b"; } +.fa-camera-rotate { + --fa: "\e0d8"; +} -.fa-landmark-flag { - --fa: "\e51c"; } +.fa-cedi-sign { + --fa: "\e0df"; +} -.fa-pencil { - --fa: "\f303"; } +.fa-chart-column { + --fa: "\e0e3"; +} -.fa-pencil-alt { - --fa: "\f303"; } +.fa-chart-gantt { + --fa: "\e0e4"; +} -.fa-backward { - --fa: "\f04a"; } +.fa-clapperboard { + --fa: "\e131"; +} -.fa-caret-right { - --fa: "\f0da"; } +.fa-closed-captioning-slash { + --fa: "\e135"; +} -.fa-comments { - --fa: "\f086"; } +.fa-clover { + --fa: "\e139"; +} -.fa-paste { - --fa: "\f0ea"; } +.fa-code-compare { + --fa: "\e13a"; +} -.fa-file-clipboard { - --fa: "\f0ea"; } +.fa-code-fork { + --fa: "\e13b"; +} .fa-code-pull-request { - --fa: "\e13c"; } + --fa: "\e13c"; +} -.fa-clipboard-list { - --fa: "\f46d"; } +.fa-colon-sign { + --fa: "\e140"; +} -.fa-truck-ramp-box { - --fa: "\f4de"; } +.fa-cruzeiro-sign { + --fa: "\e152"; +} -.fa-truck-loading { - --fa: "\f4de"; } +.fa-display { + --fa: "\e163"; +} -.fa-user-check { - --fa: "\f4fc"; } +.fa-dong-sign { + --fa: "\e169"; +} -.fa-vial-virus { - --fa: "\e597"; } +.fa-elevator { + --fa: "\e16d"; +} -.fa-sheet-plastic { - --fa: "\e571"; } +.fa-filter-circle-xmark { + --fa: "\e17b"; +} -.fa-blog { - --fa: "\f781"; } +.fa-florin-sign { + --fa: "\e184"; +} -.fa-user-ninja { - --fa: "\f504"; } +.fa-folder-closed { + --fa: "\e185"; +} -.fa-person-arrow-up-from-line { - --fa: "\e539"; } +.fa-franc-sign { + --fa: "\e18f"; +} -.fa-scroll-torah { - --fa: "\f6a0"; } +.fa-guarani-sign { + --fa: "\e19a"; +} -.fa-torah { - --fa: "\f6a0"; } +.fa-gun { + --fa: "\e19b"; +} -.fa-broom-ball { - --fa: "\f458"; } +.fa-hands-clapping { + --fa: "\e1a8"; +} -.fa-quidditch { - --fa: "\f458"; } +.fa-house-user { + --fa: "\e1b0"; +} -.fa-quidditch-broom-ball { - --fa: "\f458"; } +.fa-home-user { + --fa: "\e1b0"; +} -.fa-toggle-off { - --fa: "\f204"; } +.fa-indian-rupee-sign { + --fa: "\e1bc"; +} -.fa-box-archive { - --fa: "\f187"; } +.fa-indian-rupee { + --fa: "\e1bc"; +} -.fa-archive { - --fa: "\f187"; } +.fa-inr { + --fa: "\e1bc"; +} -.fa-person-drowning { - --fa: "\e545"; } +.fa-kip-sign { + --fa: "\e1c4"; +} -.fa-arrow-down-9-1 { - --fa: "\f886"; } +.fa-lari-sign { + --fa: "\e1c8"; +} -.fa-sort-numeric-desc { - --fa: "\f886"; } +.fa-litecoin-sign { + --fa: "\e1d3"; +} -.fa-sort-numeric-down-alt { - --fa: "\f886"; } +.fa-manat-sign { + --fa: "\e1d5"; +} -.fa-face-grin-tongue-squint { - --fa: "\f58a"; } +.fa-mask-face { + --fa: "\e1d7"; +} -.fa-grin-tongue-squint { - --fa: "\f58a"; } +.fa-mill-sign { + --fa: "\e1ed"; +} -.fa-spray-can { - --fa: "\f5bd"; } +.fa-money-bills { + --fa: "\e1f3"; +} -.fa-truck-monster { - --fa: "\f63b"; } +.fa-naira-sign { + --fa: "\e1f6"; +} -.fa-w { - --fa: "\57"; } +.fa-notdef { + --fa: "\e1fe"; +} -.fa-earth-africa { - --fa: "\f57c"; } +.fa-panorama { + --fa: "\e209"; +} -.fa-globe-africa { - --fa: "\f57c"; } +.fa-peseta-sign { + --fa: "\e221"; +} -.fa-rainbow { - --fa: "\f75b"; } +.fa-peso-sign { + --fa: "\e222"; +} -.fa-circle-notch { - --fa: "\f1ce"; } +.fa-plane-up { + --fa: "\e22d"; +} -.fa-tablet-screen-button { - --fa: "\f3fa"; } +.fa-rupiah-sign { + --fa: "\e23d"; +} -.fa-tablet-alt { - --fa: "\f3fa"; } +.fa-stairs { + --fa: "\e289"; +} -.fa-paw { - --fa: "\f1b0"; } +.fa-timeline { + --fa: "\e29c"; +} -.fa-cloud { - --fa: "\f0c2"; } +.fa-truck-front { + --fa: "\e2b7"; +} -.fa-trowel-bricks { - --fa: "\e58a"; } +.fa-turkish-lira-sign { + --fa: "\e2bb"; +} -.fa-face-flushed { - --fa: "\f579"; } +.fa-try { + --fa: "\e2bb"; +} -.fa-flushed { - --fa: "\f579"; } +.fa-turkish-lira { + --fa: "\e2bb"; +} -.fa-hospital-user { - --fa: "\f80d"; } +.fa-vault { + --fa: "\e2c5"; +} -.fa-tent-arrow-left-right { - --fa: "\e57f"; } +.fa-wand-magic-sparkles { + --fa: "\e2ca"; +} -.fa-gavel { - --fa: "\f0e3"; } +.fa-magic-wand-sparkles { + --fa: "\e2ca"; +} -.fa-legal { - --fa: "\f0e3"; } +.fa-wheat-awn { + --fa: "\e2cd"; +} -.fa-binoculars { - --fa: "\f1e5"; } +.fa-wheat-alt { + --fa: "\e2cd"; +} -.fa-microphone-slash { - --fa: "\f131"; } +.fa-wheelchair-move { + --fa: "\e2ce"; +} -.fa-box-tissue { - --fa: "\e05b"; } +.fa-wheelchair-alt { + --fa: "\e2ce"; +} -.fa-motorcycle { - --fa: "\f21c"; } +.fa-bangladeshi-taka-sign { + --fa: "\e2e6"; +} -.fa-bell-concierge { - --fa: "\f562"; } +.fa-bowl-rice { + --fa: "\e2eb"; +} -.fa-concierge-bell { - --fa: "\f562"; } +.fa-person-pregnant { + --fa: "\e31e"; +} -.fa-pen-ruler { - --fa: "\f5ae"; } +.fa-house-chimney { + --fa: "\e3af"; +} -.fa-pencil-ruler { - --fa: "\f5ae"; } +.fa-home-lg { + --fa: "\e3af"; +} -.fa-people-arrows { - --fa: "\e068"; } +.fa-house-crack { + --fa: "\e3b1"; +} -.fa-people-arrows-left-right { - --fa: "\e068"; } +.fa-house-medical { + --fa: "\e3b2"; +} -.fa-mars-and-venus-burst { - --fa: "\e523"; } +.fa-cent-sign { + --fa: "\e3f5"; +} -.fa-square-caret-right { - --fa: "\f152"; } +.fa-plus-minus { + --fa: "\e43c"; +} -.fa-caret-square-right { - --fa: "\f152"; } +.fa-sailboat { + --fa: "\e445"; +} -.fa-scissors { - --fa: "\f0c4"; } +.fa-section { + --fa: "\e447"; +} -.fa-cut { - --fa: "\f0c4"; } +.fa-shrimp { + --fa: "\e448"; +} -.fa-sun-plant-wilt { - --fa: "\e57a"; } +.fa-brazilian-real-sign { + --fa: "\e46c"; +} -.fa-toilets-portable { - --fa: "\e584"; } +.fa-chart-simple { + --fa: "\e473"; +} -.fa-hockey-puck { - --fa: "\f453"; } +.fa-diagram-next { + --fa: "\e476"; +} -.fa-table { - --fa: "\f0ce"; } +.fa-diagram-predecessor { + --fa: "\e477"; +} -.fa-magnifying-glass-arrow-right { - --fa: "\e521"; } +.fa-diagram-successor { + --fa: "\e47a"; +} -.fa-tachograph-digital { - --fa: "\f566"; } +.fa-earth-oceania { + --fa: "\e47b"; +} -.fa-digital-tachograph { - --fa: "\f566"; } +.fa-globe-oceania { + --fa: "\e47b"; +} -.fa-users-slash { - --fa: "\e073"; } +.fa-bug-slash { + --fa: "\e490"; +} -.fa-clover { - --fa: "\e139"; } +.fa-file-circle-plus { + --fa: "\e494"; +} -.fa-reply { - --fa: "\f3e5"; } +.fa-shop-lock { + --fa: "\e4a5"; +} -.fa-mail-reply { - --fa: "\f3e5"; } +.fa-virus-covid { + --fa: "\e4a8"; +} -.fa-star-and-crescent { - --fa: "\f699"; } +.fa-virus-covid-slash { + --fa: "\e4a9"; +} -.fa-house-fire { - --fa: "\e50c"; } +.fa-anchor-circle-check { + --fa: "\e4aa"; +} -.fa-square-minus { - --fa: "\f146"; } +.fa-anchor-circle-exclamation { + --fa: "\e4ab"; +} -.fa-minus-square { - --fa: "\f146"; } +.fa-anchor-circle-xmark { + --fa: "\e4ac"; +} -.fa-helicopter { - --fa: "\f533"; } +.fa-anchor-lock { + --fa: "\e4ad"; +} -.fa-compass { - --fa: "\f14e"; } +.fa-arrow-down-up-across-line { + --fa: "\e4af"; +} -.fa-square-caret-down { - --fa: "\f150"; } +.fa-arrow-down-up-lock { + --fa: "\e4b0"; +} -.fa-caret-square-down { - --fa: "\f150"; } +.fa-arrow-right-to-city { + --fa: "\e4b3"; +} -.fa-file-circle-question { - --fa: "\e4ef"; } +.fa-arrow-up-from-ground-water { + --fa: "\e4b5"; +} -.fa-laptop-code { - --fa: "\f5fc"; } +.fa-arrow-up-from-water-pump { + --fa: "\e4b6"; +} -.fa-swatchbook { - --fa: "\f5c3"; } +.fa-arrow-up-right-dots { + --fa: "\e4b7"; +} -.fa-prescription-bottle { - --fa: "\f485"; } +.fa-arrows-down-to-line { + --fa: "\e4b8"; +} -.fa-bars { - --fa: "\f0c9"; } +.fa-arrows-down-to-people { + --fa: "\e4b9"; +} -.fa-navicon { - --fa: "\f0c9"; } +.fa-arrows-left-right-to-line { + --fa: "\e4ba"; +} -.fa-people-group { - --fa: "\e533"; } +.fa-arrows-spin { + --fa: "\e4bb"; +} -.fa-hourglass-end { - --fa: "\f253"; } +.fa-arrows-split-up-and-left { + --fa: "\e4bc"; +} -.fa-hourglass-3 { - --fa: "\f253"; } +.fa-arrows-to-circle { + --fa: "\e4bd"; +} -.fa-heart-crack { - --fa: "\f7a9"; } +.fa-arrows-to-dot { + --fa: "\e4be"; +} -.fa-heart-broken { - --fa: "\f7a9"; } +.fa-arrows-to-eye { + --fa: "\e4bf"; +} -.fa-square-up-right { - --fa: "\f360"; } +.fa-arrows-turn-right { + --fa: "\e4c0"; +} -.fa-external-link-square-alt { - --fa: "\f360"; } +.fa-arrows-turn-to-dots { + --fa: "\e4c1"; +} -.fa-face-kiss-beam { - --fa: "\f597"; } +.fa-arrows-up-to-line { + --fa: "\e4c2"; +} -.fa-kiss-beam { - --fa: "\f597"; } +.fa-bore-hole { + --fa: "\e4c3"; +} -.fa-film { - --fa: "\f008"; } +.fa-bottle-droplet { + --fa: "\e4c4"; +} -.fa-ruler-horizontal { - --fa: "\f547"; } +.fa-bottle-water { + --fa: "\e4c5"; +} -.fa-people-robbery { - --fa: "\e536"; } +.fa-bowl-food { + --fa: "\e4c6"; +} -.fa-lightbulb { - --fa: "\f0eb"; } +.fa-boxes-packing { + --fa: "\e4c7"; +} -.fa-caret-left { - --fa: "\f0d9"; } +.fa-bridge { + --fa: "\e4c8"; +} -.fa-circle-exclamation { - --fa: "\f06a"; } +.fa-bridge-circle-check { + --fa: "\e4c9"; +} -.fa-exclamation-circle { - --fa: "\f06a"; } +.fa-bridge-circle-exclamation { + --fa: "\e4ca"; +} -.fa-school-circle-xmark { - --fa: "\e56d"; } +.fa-bridge-circle-xmark { + --fa: "\e4cb"; +} -.fa-arrow-right-from-bracket { - --fa: "\f08b"; } +.fa-bridge-lock { + --fa: "\e4cc"; +} -.fa-sign-out { - --fa: "\f08b"; } +.fa-bridge-water { + --fa: "\e4ce"; +} -.fa-circle-chevron-down { - --fa: "\f13a"; } +.fa-bucket { + --fa: "\e4cf"; +} -.fa-chevron-circle-down { - --fa: "\f13a"; } +.fa-bugs { + --fa: "\e4d0"; +} -.fa-unlock-keyhole { - --fa: "\f13e"; } +.fa-building-circle-arrow-right { + --fa: "\e4d1"; +} -.fa-unlock-alt { - --fa: "\f13e"; } +.fa-building-circle-check { + --fa: "\e4d2"; +} -.fa-cloud-showers-heavy { - --fa: "\f740"; } +.fa-building-circle-exclamation { + --fa: "\e4d3"; +} -.fa-headphones-simple { - --fa: "\f58f"; } +.fa-building-circle-xmark { + --fa: "\e4d4"; +} -.fa-headphones-alt { - --fa: "\f58f"; } +.fa-building-flag { + --fa: "\e4d5"; +} -.fa-sitemap { - --fa: "\f0e8"; } +.fa-building-lock { + --fa: "\e4d6"; +} -.fa-circle-dollar-to-slot { - --fa: "\f4b9"; } +.fa-building-ngo { + --fa: "\e4d7"; +} -.fa-donate { - --fa: "\f4b9"; } +.fa-building-shield { + --fa: "\e4d8"; +} -.fa-memory { - --fa: "\f538"; } +.fa-building-un { + --fa: "\e4d9"; +} -.fa-road-spikes { - --fa: "\e568"; } +.fa-building-user { + --fa: "\e4da"; +} -.fa-fire-burner { - --fa: "\e4f1"; } +.fa-building-wheat { + --fa: "\e4db"; +} -.fa-flag { - --fa: "\f024"; } +.fa-burst { + --fa: "\e4dc"; +} -.fa-hanukiah { - --fa: "\f6e6"; } +.fa-car-on { + --fa: "\e4dd"; +} -.fa-feather { - --fa: "\f52d"; } +.fa-car-tunnel { + --fa: "\e4de"; +} -.fa-volume-low { - --fa: "\f027"; } +.fa-child-combatant { + --fa: "\e4e0"; +} -.fa-volume-down { - --fa: "\f027"; } +.fa-child-rifle { + --fa: "\e4e0"; +} -.fa-comment-slash { - --fa: "\f4b3"; } +.fa-children { + --fa: "\e4e1"; +} -.fa-cloud-sun-rain { - --fa: "\f743"; } +.fa-circle-nodes { + --fa: "\e4e2"; +} -.fa-compress { - --fa: "\f066"; } +.fa-clipboard-question { + --fa: "\e4e3"; +} -.fa-wheat-awn { - --fa: "\e2cd"; } +.fa-cloud-showers-water { + --fa: "\e4e4"; +} -.fa-wheat-alt { - --fa: "\e2cd"; } +.fa-computer { + --fa: "\e4e5"; +} -.fa-ankh { - --fa: "\f644"; } +.fa-cubes-stacked { + --fa: "\e4e6"; +} -.fa-hands-holding-child { - --fa: "\e4fa"; } +.fa-envelope-circle-check { + --fa: "\e4e8"; +} -.fa-asterisk { - --fa: "\2a"; } +.fa-explosion { + --fa: "\e4e9"; +} -.fa-square-check { - --fa: "\f14a"; } +.fa-ferry { + --fa: "\e4ea"; +} -.fa-check-square { - --fa: "\f14a"; } +.fa-file-circle-exclamation { + --fa: "\e4eb"; +} -.fa-peseta-sign { - --fa: "\e221"; } +.fa-file-circle-minus { + --fa: "\e4ed"; +} -.fa-heading { - --fa: "\f1dc"; } +.fa-file-circle-question { + --fa: "\e4ef"; +} -.fa-header { - --fa: "\f1dc"; } +.fa-file-shield { + --fa: "\e4f0"; +} -.fa-ghost { - --fa: "\f6e2"; } +.fa-fire-burner { + --fa: "\e4f1"; +} -.fa-list { - --fa: "\f03a"; } +.fa-fish-fins { + --fa: "\e4f2"; +} -.fa-list-squares { - --fa: "\f03a"; } +.fa-flask-vial { + --fa: "\e4f3"; +} -.fa-square-phone-flip { - --fa: "\f87b"; } +.fa-glass-water { + --fa: "\e4f4"; +} -.fa-phone-square-alt { - --fa: "\f87b"; } +.fa-glass-water-droplet { + --fa: "\e4f5"; +} -.fa-cart-plus { - --fa: "\f217"; } +.fa-group-arrows-rotate { + --fa: "\e4f6"; +} -.fa-gamepad { - --fa: "\f11b"; } +.fa-hand-holding-hand { + --fa: "\e4f7"; +} -.fa-circle-dot { - --fa: "\f192"; } +.fa-handcuffs { + --fa: "\e4f8"; +} -.fa-dot-circle { - --fa: "\f192"; } +.fa-hands-bound { + --fa: "\e4f9"; +} -.fa-face-dizzy { - --fa: "\f567"; } +.fa-hands-holding-child { + --fa: "\e4fa"; +} -.fa-dizzy { - --fa: "\f567"; } +.fa-hands-holding-circle { + --fa: "\e4fb"; +} -.fa-egg { - --fa: "\f7fb"; } +.fa-heart-circle-bolt { + --fa: "\e4fc"; +} -.fa-house-medical-circle-xmark { - --fa: "\e513"; } +.fa-heart-circle-check { + --fa: "\e4fd"; +} -.fa-campground { - --fa: "\f6bb"; } +.fa-heart-circle-exclamation { + --fa: "\e4fe"; +} -.fa-folder-plus { - --fa: "\f65e"; } +.fa-heart-circle-minus { + --fa: "\e4ff"; +} -.fa-futbol { - --fa: "\f1e3"; } +.fa-heart-circle-plus { + --fa: "\e500"; +} -.fa-futbol-ball { - --fa: "\f1e3"; } +.fa-heart-circle-xmark { + --fa: "\e501"; +} -.fa-soccer-ball { - --fa: "\f1e3"; } +.fa-helicopter-symbol { + --fa: "\e502"; +} -.fa-paintbrush { - --fa: "\f1fc"; } +.fa-helmet-un { + --fa: "\e503"; +} -.fa-paint-brush { - --fa: "\f1fc"; } +.fa-hill-avalanche { + --fa: "\e507"; +} -.fa-lock { - --fa: "\f023"; } +.fa-hill-rockslide { + --fa: "\e508"; +} -.fa-gas-pump { - --fa: "\f52f"; } +.fa-house-circle-check { + --fa: "\e509"; +} -.fa-hot-tub-person { - --fa: "\f593"; } +.fa-house-circle-exclamation { + --fa: "\e50a"; +} -.fa-hot-tub { - --fa: "\f593"; } +.fa-house-circle-xmark { + --fa: "\e50b"; +} -.fa-map-location { - --fa: "\f59f"; } +.fa-house-fire { + --fa: "\e50c"; +} -.fa-map-marked { - --fa: "\f59f"; } +.fa-house-flag { + --fa: "\e50d"; +} .fa-house-flood-water { - --fa: "\e50e"; } + --fa: "\e50e"; +} -.fa-tree { - --fa: "\f1bb"; } +.fa-house-flood-water-circle-arrow-right { + --fa: "\e50f"; +} -.fa-bridge-lock { - --fa: "\e4cc"; } +.fa-house-lock { + --fa: "\e510"; +} -.fa-sack-dollar { - --fa: "\f81d"; } +.fa-house-medical-circle-check { + --fa: "\e511"; +} -.fa-pen-to-square { - --fa: "\f044"; } +.fa-house-medical-circle-exclamation { + --fa: "\e512"; +} -.fa-edit { - --fa: "\f044"; } +.fa-house-medical-circle-xmark { + --fa: "\e513"; +} -.fa-car-side { - --fa: "\f5e4"; } +.fa-house-medical-flag { + --fa: "\e514"; +} -.fa-share-nodes { - --fa: "\f1e0"; } +.fa-house-tsunami { + --fa: "\e515"; +} -.fa-share-alt { - --fa: "\f1e0"; } +.fa-jar { + --fa: "\e516"; +} -.fa-heart-circle-minus { - --fa: "\e4ff"; } +.fa-jar-wheat { + --fa: "\e517"; +} -.fa-hourglass-half { - --fa: "\f252"; } +.fa-jet-fighter-up { + --fa: "\e518"; +} -.fa-hourglass-2 { - --fa: "\f252"; } +.fa-jug-detergent { + --fa: "\e519"; +} -.fa-microscope { - --fa: "\f610"; } +.fa-kitchen-set { + --fa: "\e51a"; +} -.fa-sink { - --fa: "\e06d"; } +.fa-land-mine-on { + --fa: "\e51b"; +} -.fa-bag-shopping { - --fa: "\f290"; } +.fa-landmark-flag { + --fa: "\e51c"; +} -.fa-shopping-bag { - --fa: "\f290"; } +.fa-laptop-file { + --fa: "\e51d"; +} -.fa-arrow-down-z-a { - --fa: "\f881"; } +.fa-lines-leaning { + --fa: "\e51e"; +} -.fa-sort-alpha-desc { - --fa: "\f881"; } +.fa-location-pin-lock { + --fa: "\e51f"; +} -.fa-sort-alpha-down-alt { - --fa: "\f881"; } +.fa-locust { + --fa: "\e520"; +} -.fa-mitten { - --fa: "\f7b5"; } +.fa-magnifying-glass-arrow-right { + --fa: "\e521"; +} -.fa-person-rays { - --fa: "\e54d"; } +.fa-magnifying-glass-chart { + --fa: "\e522"; +} -.fa-users { - --fa: "\f0c0"; } +.fa-mars-and-venus-burst { + --fa: "\e523"; +} -.fa-eye-slash { - --fa: "\f070"; } +.fa-mask-ventilator { + --fa: "\e524"; +} -.fa-flask-vial { - --fa: "\e4f3"; } +.fa-mattress-pillow { + --fa: "\e525"; +} -.fa-hand { - --fa: "\f256"; } +.fa-mobile-retro { + --fa: "\e527"; +} -.fa-hand-paper { - --fa: "\f256"; } +.fa-money-bill-transfer { + --fa: "\e528"; +} -.fa-om { - --fa: "\f679"; } +.fa-money-bill-trend-up { + --fa: "\e529"; +} -.fa-worm { - --fa: "\e599"; } +.fa-money-bill-wheat { + --fa: "\e52a"; +} -.fa-house-circle-xmark { - --fa: "\e50b"; } +.fa-mosquito { + --fa: "\e52b"; +} -.fa-plug { - --fa: "\f1e6"; } +.fa-mosquito-net { + --fa: "\e52c"; +} -.fa-chevron-up { - --fa: "\f077"; } +.fa-mound { + --fa: "\e52d"; +} -.fa-hand-spock { - --fa: "\f259"; } +.fa-mountain-city { + --fa: "\e52e"; +} -.fa-stopwatch { - --fa: "\f2f2"; } +.fa-mountain-sun { + --fa: "\e52f"; +} -.fa-face-kiss { - --fa: "\f596"; } +.fa-oil-well { + --fa: "\e532"; +} -.fa-kiss { - --fa: "\f596"; } +.fa-people-group { + --fa: "\e533"; +} -.fa-bridge-circle-xmark { - --fa: "\e4cb"; } +.fa-people-line { + --fa: "\e534"; +} -.fa-face-grin-tongue { - --fa: "\f589"; } +.fa-people-pulling { + --fa: "\e535"; +} -.fa-grin-tongue { - --fa: "\f589"; } +.fa-people-robbery { + --fa: "\e536"; +} -.fa-chess-bishop { - --fa: "\f43a"; } +.fa-people-roof { + --fa: "\e537"; +} -.fa-face-grin-wink { - --fa: "\f58c"; } +.fa-person-arrow-down-to-line { + --fa: "\e538"; +} -.fa-grin-wink { - --fa: "\f58c"; } +.fa-person-arrow-up-from-line { + --fa: "\e539"; +} -.fa-ear-deaf { - --fa: "\f2a4"; } +.fa-person-breastfeeding { + --fa: "\e53a"; +} -.fa-deaf { - --fa: "\f2a4"; } +.fa-person-burst { + --fa: "\e53b"; +} -.fa-deafness { - --fa: "\f2a4"; } +.fa-person-cane { + --fa: "\e53c"; +} -.fa-hard-of-hearing { - --fa: "\f2a4"; } +.fa-person-chalkboard { + --fa: "\e53d"; +} -.fa-road-circle-check { - --fa: "\e564"; } +.fa-person-circle-check { + --fa: "\e53e"; +} -.fa-dice-five { - --fa: "\f523"; } +.fa-person-circle-exclamation { + --fa: "\e53f"; +} -.fa-square-rss { - --fa: "\f143"; } +.fa-person-circle-minus { + --fa: "\e540"; +} -.fa-rss-square { - --fa: "\f143"; } +.fa-person-circle-plus { + --fa: "\e541"; +} -.fa-land-mine-on { - --fa: "\e51b"; } +.fa-person-circle-question { + --fa: "\e542"; +} -.fa-i-cursor { - --fa: "\f246"; } +.fa-person-circle-xmark { + --fa: "\e543"; +} -.fa-stamp { - --fa: "\f5bf"; } +.fa-person-dress-burst { + --fa: "\e544"; +} -.fa-stairs { - --fa: "\e289"; } +.fa-person-drowning { + --fa: "\e545"; +} -.fa-i { - --fa: "\49"; } +.fa-person-falling { + --fa: "\e546"; +} -.fa-hryvnia-sign { - --fa: "\f6f2"; } +.fa-person-falling-burst { + --fa: "\e547"; +} -.fa-hryvnia { - --fa: "\f6f2"; } +.fa-person-half-dress { + --fa: "\e548"; +} -.fa-pills { - --fa: "\f484"; } +.fa-person-harassing { + --fa: "\e549"; +} -.fa-face-grin-wide { - --fa: "\f581"; } +.fa-person-military-pointing { + --fa: "\e54a"; +} -.fa-grin-alt { - --fa: "\f581"; } +.fa-person-military-rifle { + --fa: "\e54b"; +} -.fa-tooth { - --fa: "\f5c9"; } +.fa-person-military-to-person { + --fa: "\e54c"; +} -.fa-v { - --fa: "\56"; } +.fa-person-rays { + --fa: "\e54d"; +} -.fa-bangladeshi-taka-sign { - --fa: "\e2e6"; } +.fa-person-rifle { + --fa: "\e54e"; +} -.fa-bicycle { - --fa: "\f206"; } +.fa-person-shelter { + --fa: "\e54f"; +} -.fa-staff-snake { - --fa: "\e579"; } +.fa-person-walking-arrow-loop-left { + --fa: "\e551"; +} -.fa-rod-asclepius { - --fa: "\e579"; } +.fa-person-walking-arrow-right { + --fa: "\e552"; +} -.fa-rod-snake { - --fa: "\e579"; } +.fa-person-walking-dashed-line-arrow-right { + --fa: "\e553"; +} -.fa-staff-aesculapius { - --fa: "\e579"; } +.fa-person-walking-luggage { + --fa: "\e554"; +} -.fa-head-side-cough-slash { - --fa: "\e062"; } +.fa-plane-circle-check { + --fa: "\e555"; +} -.fa-truck-medical { - --fa: "\f0f9"; } +.fa-plane-circle-exclamation { + --fa: "\e556"; +} -.fa-ambulance { - --fa: "\f0f9"; } +.fa-plane-circle-xmark { + --fa: "\e557"; +} -.fa-wheat-awn-circle-exclamation { - --fa: "\e598"; } +.fa-plane-lock { + --fa: "\e558"; +} -.fa-snowman { - --fa: "\f7d0"; } +.fa-plate-wheat { + --fa: "\e55a"; +} -.fa-mortar-pestle { - --fa: "\f5a7"; } +.fa-plug-circle-bolt { + --fa: "\e55b"; +} -.fa-road-barrier { - --fa: "\e562"; } +.fa-plug-circle-check { + --fa: "\e55c"; +} -.fa-school { - --fa: "\f549"; } +.fa-plug-circle-exclamation { + --fa: "\e55d"; +} -.fa-igloo { - --fa: "\f7ae"; } +.fa-plug-circle-minus { + --fa: "\e55e"; +} -.fa-joint { - --fa: "\f595"; } +.fa-plug-circle-plus { + --fa: "\e55f"; +} -.fa-angle-right { - --fa: "\f105"; } +.fa-plug-circle-xmark { + --fa: "\e560"; +} -.fa-horse { - --fa: "\f6f0"; } +.fa-ranking-star { + --fa: "\e561"; +} -.fa-q { - --fa: "\51"; } +.fa-road-barrier { + --fa: "\e562"; +} -.fa-g { - --fa: "\47"; } +.fa-road-bridge { + --fa: "\e563"; +} -.fa-notes-medical { - --fa: "\f481"; } +.fa-road-circle-check { + --fa: "\e564"; +} -.fa-temperature-half { - --fa: "\f2c9"; } +.fa-road-circle-exclamation { + --fa: "\e565"; +} -.fa-temperature-2 { - --fa: "\f2c9"; } +.fa-road-circle-xmark { + --fa: "\e566"; +} -.fa-thermometer-2 { - --fa: "\f2c9"; } +.fa-road-lock { + --fa: "\e567"; +} -.fa-thermometer-half { - --fa: "\f2c9"; } +.fa-road-spikes { + --fa: "\e568"; +} -.fa-dong-sign { - --fa: "\e169"; } +.fa-rug { + --fa: "\e569"; +} -.fa-capsules { - --fa: "\f46b"; } +.fa-sack-xmark { + --fa: "\e56a"; +} -.fa-poo-storm { - --fa: "\f75a"; } +.fa-school-circle-check { + --fa: "\e56b"; +} -.fa-poo-bolt { - --fa: "\f75a"; } +.fa-school-circle-exclamation { + --fa: "\e56c"; +} -.fa-face-frown-open { - --fa: "\f57a"; } +.fa-school-circle-xmark { + --fa: "\e56d"; +} -.fa-frown-open { - --fa: "\f57a"; } +.fa-school-flag { + --fa: "\e56e"; +} -.fa-hand-point-up { - --fa: "\f0a6"; } +.fa-school-lock { + --fa: "\e56f"; +} -.fa-money-bill { - --fa: "\f0d6"; } +.fa-sheet-plastic { + --fa: "\e571"; +} -.fa-bookmark { - --fa: "\f02e"; } +.fa-shield-cat { + --fa: "\e572"; +} -.fa-align-justify { - --fa: "\f039"; } +.fa-shield-dog { + --fa: "\e573"; +} -.fa-umbrella-beach { - --fa: "\f5ca"; } +.fa-shield-heart { + --fa: "\e574"; +} -.fa-helmet-un { - --fa: "\e503"; } +.fa-square-nfi { + --fa: "\e576"; +} -.fa-bullseye { - --fa: "\f140"; } +.fa-square-person-confined { + --fa: "\e577"; +} -.fa-bacon { - --fa: "\f7e5"; } +.fa-square-virus { + --fa: "\e578"; +} -.fa-hand-point-down { - --fa: "\f0a7"; } +.fa-staff-snake { + --fa: "\e579"; +} -.fa-arrow-up-from-bracket { - --fa: "\e09a"; } +.fa-rod-asclepius { + --fa: "\e579"; +} -.fa-folder { - --fa: "\f07b"; } +.fa-rod-snake { + --fa: "\e579"; +} -.fa-folder-blank { - --fa: "\f07b"; } +.fa-staff-aesculapius { + --fa: "\e579"; +} -.fa-file-waveform { - --fa: "\f478"; } +.fa-sun-plant-wilt { + --fa: "\e57a"; +} -.fa-file-medical-alt { - --fa: "\f478"; } +.fa-tarp { + --fa: "\e57b"; +} -.fa-radiation { - --fa: "\f7b9"; } +.fa-tarp-droplet { + --fa: "\e57c"; +} -.fa-chart-simple { - --fa: "\e473"; } +.fa-tent { + --fa: "\e57d"; +} -.fa-mars-stroke { - --fa: "\f229"; } +.fa-tent-arrow-down-to-line { + --fa: "\e57e"; +} -.fa-vial { - --fa: "\f492"; } +.fa-tent-arrow-left-right { + --fa: "\e57f"; +} -.fa-gauge { - --fa: "\f624"; } +.fa-tent-arrow-turn-left { + --fa: "\e580"; +} -.fa-dashboard { - --fa: "\f624"; } +.fa-tent-arrows-down { + --fa: "\e581"; +} -.fa-gauge-med { - --fa: "\f624"; } +.fa-tents { + --fa: "\e582"; +} -.fa-tachometer-alt-average { - --fa: "\f624"; } +.fa-toilet-portable { + --fa: "\e583"; +} -.fa-wand-magic-sparkles { - --fa: "\e2ca"; } +.fa-toilets-portable { + --fa: "\e584"; +} -.fa-magic-wand-sparkles { - --fa: "\e2ca"; } +.fa-tower-cell { + --fa: "\e585"; +} -.fa-e { - --fa: "\45"; } +.fa-tower-observation { + --fa: "\e586"; +} -.fa-pen-clip { - --fa: "\f305"; } +.fa-tree-city { + --fa: "\e587"; +} -.fa-pen-alt { - --fa: "\f305"; } +.fa-trowel { + --fa: "\e589"; +} -.fa-bridge-circle-exclamation { - --fa: "\e4ca"; } +.fa-trowel-bricks { + --fa: "\e58a"; +} -.fa-user { - --fa: "\f007"; } +.fa-truck-arrow-right { + --fa: "\e58b"; +} -.fa-school-circle-check { - --fa: "\e56b"; } +.fa-truck-droplet { + --fa: "\e58c"; +} -.fa-dumpster { - --fa: "\f793"; } +.fa-truck-field { + --fa: "\e58d"; +} -.fa-van-shuttle { - --fa: "\f5b6"; } +.fa-truck-field-un { + --fa: "\e58e"; +} -.fa-shuttle-van { - --fa: "\f5b6"; } +.fa-truck-plane { + --fa: "\e58f"; +} -.fa-building-user { - --fa: "\e4da"; } +.fa-users-between-lines { + --fa: "\e591"; +} -.fa-square-caret-left { - --fa: "\f191"; } +.fa-users-line { + --fa: "\e592"; +} -.fa-caret-square-left { - --fa: "\f191"; } +.fa-users-rays { + --fa: "\e593"; +} -.fa-highlighter { - --fa: "\f591"; } +.fa-users-rectangle { + --fa: "\e594"; +} -.fa-key { - --fa: "\f084"; } +.fa-users-viewfinder { + --fa: "\e595"; +} -.fa-bullhorn { - --fa: "\f0a1"; } +.fa-vial-circle-check { + --fa: "\e596"; +} -.fa-globe { - --fa: "\f0ac"; } +.fa-vial-virus { + --fa: "\e597"; +} -.fa-synagogue { - --fa: "\f69b"; } +.fa-wheat-awn-circle-exclamation { + --fa: "\e598"; +} -.fa-person-half-dress { - --fa: "\e548"; } +.fa-worm { + --fa: "\e599"; +} -.fa-road-bridge { - --fa: "\e563"; } +.fa-xmarks-lines { + --fa: "\e59a"; +} -.fa-location-arrow { - --fa: "\f124"; } +.fa-child-dress { + --fa: "\e59c"; +} -.fa-c { - --fa: "\43"; } +.fa-child-reaching { + --fa: "\e59d"; +} -.fa-tablet-button { - --fa: "\f10a"; } +.fa-file-circle-check { + --fa: "\e5a0"; +} -.fa-building-lock { - --fa: "\e4d6"; } +.fa-file-circle-xmark { + --fa: "\e5a1"; +} -.fa-pizza-slice { - --fa: "\f818"; } +.fa-person-through-window { + --fa: "\e5a9"; +} -.fa-money-bill-wave { - --fa: "\f53a"; } +.fa-plant-wilt { + --fa: "\e5aa"; +} -.fa-chart-area { - --fa: "\f1fe"; } +.fa-stapler { + --fa: "\e5af"; +} -.fa-area-chart { - --fa: "\f1fe"; } +.fa-train-tram { + --fa: "\e5b4"; +} -.fa-house-flag { - --fa: "\e50d"; } +.fa-table-cells-column-lock { + --fa: "\e678"; +} -.fa-person-circle-minus { - --fa: "\e540"; } +.fa-table-cells-row-lock { + --fa: "\e67a"; +} -.fa-ban { - --fa: "\f05e"; } +.fa-web-awesome { + --fa: "\e682"; +} -.fa-cancel { - --fa: "\f05e"; } +.fa-thumbtack-slash { + --fa: "\e68f"; +} -.fa-camera-rotate { - --fa: "\e0d8"; } +.fa-thumb-tack-slash { + --fa: "\e68f"; +} -.fa-spray-can-sparkles { - --fa: "\f5d0"; } +.fa-table-cells-row-unlock { + --fa: "\e691"; +} -.fa-air-freshener { - --fa: "\f5d0"; } +.fa-chart-diagram { + --fa: "\e695"; +} -.fa-star { - --fa: "\f005"; } +.fa-comment-nodes { + --fa: "\e696"; +} -.fa-repeat { - --fa: "\f363"; } +.fa-file-fragment { + --fa: "\e697"; +} -.fa-cross { - --fa: "\f654"; } +.fa-file-half-dashed { + --fa: "\e698"; +} -.fa-box { - --fa: "\f466"; } +.fa-hexagon-nodes { + --fa: "\e699"; +} -.fa-venus-mars { - --fa: "\f228"; } +.fa-hexagon-nodes-bolt { + --fa: "\e69a"; +} -.fa-arrow-pointer { - --fa: "\f245"; } +.fa-square-binary { + --fa: "\e69b"; +} -.fa-mouse-pointer { - --fa: "\f245"; } +.fa-pentagon { + --fa: "\e790"; +} -.fa-maximize { - --fa: "\f31e"; } +.fa-non-binary { + --fa: "\e807"; +} -.fa-expand-arrows-alt { - --fa: "\f31e"; } +.fa-spiral { + --fa: "\e80a"; +} -.fa-charging-station { - --fa: "\f5e7"; } +.fa-picture-in-picture { + --fa: "\e80b"; +} -.fa-shapes { - --fa: "\f61f"; } +.fa-mobile-vibrate { + --fa: "\e816"; +} -.fa-triangle-circle-square { - --fa: "\f61f"; } +.fa-single-quote-left { + --fa: "\e81b"; +} -.fa-shuffle { - --fa: "\f074"; } +.fa-single-quote-right { + --fa: "\e81c"; +} -.fa-random { - --fa: "\f074"; } +.fa-bus-side { + --fa: "\e81d"; +} -.fa-person-running { - --fa: "\f70c"; } +.fa-septagon { + --fa: "\e820"; +} -.fa-running { - --fa: "\f70c"; } +.fa-heptagon { + --fa: "\e820"; +} -.fa-mobile-retro { - --fa: "\e527"; } +.fa-aquarius { + --fa: "\e845"; +} -.fa-grip-lines-vertical { - --fa: "\f7a5"; } +.fa-aries { + --fa: "\e846"; +} -.fa-spider { - --fa: "\f717"; } +.fa-cancer { + --fa: "\e847"; +} -.fa-hands-bound { - --fa: "\e4f9"; } +.fa-capricorn { + --fa: "\e848"; +} -.fa-file-invoice-dollar { - --fa: "\f571"; } +.fa-gemini { + --fa: "\e849"; +} -.fa-plane-circle-exclamation { - --fa: "\e556"; } +.fa-leo { + --fa: "\e84a"; +} -.fa-x-ray { - --fa: "\f497"; } +.fa-libra { + --fa: "\e84b"; +} -.fa-spell-check { - --fa: "\f891"; } +.fa-pisces { + --fa: "\e84c"; +} -.fa-slash { - --fa: "\f715"; } +.fa-sagittarius { + --fa: "\e84d"; +} -.fa-computer-mouse { - --fa: "\f8cc"; } +.fa-scorpio { + --fa: "\e84e"; +} -.fa-mouse { - --fa: "\f8cc"; } +.fa-taurus { + --fa: "\e84f"; +} -.fa-arrow-right-to-bracket { - --fa: "\f090"; } +.fa-virgo { + --fa: "\e850"; +} -.fa-sign-in { - --fa: "\f090"; } +.fa-martini-glass-empty { + --fa: "\f000"; +} -.fa-shop-slash { - --fa: "\e070"; } +.fa-glass-martini { + --fa: "\f000"; +} -.fa-store-alt-slash { - --fa: "\e070"; } +.fa-music { + --fa: "\f001"; +} -.fa-server { - --fa: "\f233"; } +.fa-magnifying-glass { + --fa: "\f002"; +} -.fa-virus-covid-slash { - --fa: "\e4a9"; } +.fa-search { + --fa: "\f002"; +} -.fa-shop-lock { - --fa: "\e4a5"; } +.fa-heart { + --fa: "\f004"; +} -.fa-hourglass-start { - --fa: "\f251"; } +.fa-star { + --fa: "\f005"; +} -.fa-hourglass-1 { - --fa: "\f251"; } +.fa-user { + --fa: "\f007"; +} -.fa-blender-phone { - --fa: "\f6b6"; } +.fa-user-alt { + --fa: "\f007"; +} -.fa-building-wheat { - --fa: "\e4db"; } +.fa-user-large { + --fa: "\f007"; +} -.fa-person-breastfeeding { - --fa: "\e53a"; } +.fa-film { + --fa: "\f008"; +} -.fa-right-to-bracket { - --fa: "\f2f6"; } +.fa-film-alt { + --fa: "\f008"; +} -.fa-sign-in-alt { - --fa: "\f2f6"; } +.fa-film-simple { + --fa: "\f008"; +} -.fa-venus { - --fa: "\f221"; } +.fa-table-cells-large { + --fa: "\f009"; +} -.fa-passport { - --fa: "\f5ab"; } +.fa-th-large { + --fa: "\f009"; +} -.fa-thumbtack-slash { - --fa: "\e68f"; } +.fa-table-cells { + --fa: "\f00a"; +} -.fa-thumb-tack-slash { - --fa: "\e68f"; } +.fa-th { + --fa: "\f00a"; +} -.fa-heart-pulse { - --fa: "\f21e"; } +.fa-table-list { + --fa: "\f00b"; +} -.fa-heartbeat { - --fa: "\f21e"; } +.fa-th-list { + --fa: "\f00b"; +} -.fa-people-carry-box { - --fa: "\f4ce"; } +.fa-check { + --fa: "\f00c"; +} -.fa-people-carry { - --fa: "\f4ce"; } +.fa-xmark { + --fa: "\f00d"; +} -.fa-temperature-high { - --fa: "\f769"; } +.fa-close { + --fa: "\f00d"; +} -.fa-microchip { - --fa: "\f2db"; } +.fa-multiply { + --fa: "\f00d"; +} -.fa-crown { - --fa: "\f521"; } +.fa-remove { + --fa: "\f00d"; +} -.fa-weight-hanging { - --fa: "\f5cd"; } +.fa-times { + --fa: "\f00d"; +} -.fa-xmarks-lines { - --fa: "\e59a"; } +.fa-magnifying-glass-plus { + --fa: "\f00e"; +} -.fa-file-prescription { - --fa: "\f572"; } +.fa-search-plus { + --fa: "\f00e"; +} -.fa-weight-scale { - --fa: "\f496"; } +.fa-magnifying-glass-minus { + --fa: "\f010"; +} -.fa-weight { - --fa: "\f496"; } +.fa-search-minus { + --fa: "\f010"; +} -.fa-user-group { - --fa: "\f500"; } +.fa-power-off { + --fa: "\f011"; +} -.fa-user-friends { - --fa: "\f500"; } +.fa-signal { + --fa: "\f012"; +} -.fa-arrow-up-a-z { - --fa: "\f15e"; } +.fa-signal-5 { + --fa: "\f012"; +} -.fa-sort-alpha-up { - --fa: "\f15e"; } +.fa-signal-perfect { + --fa: "\f012"; +} -.fa-chess-knight { - --fa: "\f441"; } +.fa-gear { + --fa: "\f013"; +} -.fa-face-laugh-squint { - --fa: "\f59b"; } +.fa-cog { + --fa: "\f013"; +} -.fa-laugh-squint { - --fa: "\f59b"; } +.fa-house { + --fa: "\f015"; +} -.fa-wheelchair { - --fa: "\f193"; } +.fa-home { + --fa: "\f015"; +} -.fa-circle-arrow-up { - --fa: "\f0aa"; } +.fa-home-alt { + --fa: "\f015"; +} -.fa-arrow-circle-up { - --fa: "\f0aa"; } +.fa-home-lg-alt { + --fa: "\f015"; +} -.fa-toggle-on { - --fa: "\f205"; } +.fa-clock { + --fa: "\f017"; +} -.fa-person-walking { - --fa: "\f554"; } +.fa-clock-four { + --fa: "\f017"; +} -.fa-walking { - --fa: "\f554"; } +.fa-road { + --fa: "\f018"; +} -.fa-l { - --fa: "\4c"; } +.fa-download { + --fa: "\f019"; +} -.fa-fire { - --fa: "\f06d"; } +.fa-inbox { + --fa: "\f01c"; +} -.fa-bed-pulse { - --fa: "\f487"; } +.fa-arrow-rotate-right { + --fa: "\f01e"; +} -.fa-procedures { - --fa: "\f487"; } +.fa-arrow-right-rotate { + --fa: "\f01e"; +} -.fa-shuttle-space { - --fa: "\f197"; } +.fa-arrow-rotate-forward { + --fa: "\f01e"; +} -.fa-space-shuttle { - --fa: "\f197"; } +.fa-redo { + --fa: "\f01e"; +} -.fa-face-laugh { - --fa: "\f599"; } +.fa-arrows-rotate { + --fa: "\f021"; +} -.fa-laugh { - --fa: "\f599"; } +.fa-refresh { + --fa: "\f021"; +} -.fa-folder-open { - --fa: "\f07c"; } +.fa-sync { + --fa: "\f021"; +} -.fa-heart-circle-plus { - --fa: "\e500"; } +.fa-rectangle-list { + --fa: "\f022"; +} -.fa-code-fork { - --fa: "\e13b"; } +.fa-list-alt { + --fa: "\f022"; +} -.fa-city { - --fa: "\f64f"; } +.fa-lock { + --fa: "\f023"; +} -.fa-microphone-lines { - --fa: "\f3c9"; } +.fa-flag { + --fa: "\f024"; +} -.fa-microphone-alt { - --fa: "\f3c9"; } +.fa-headphones { + --fa: "\f025"; +} -.fa-pepper-hot { - --fa: "\f816"; } +.fa-headphones-alt { + --fa: "\f025"; +} -.fa-unlock { - --fa: "\f09c"; } +.fa-headphones-simple { + --fa: "\f025"; +} -.fa-colon-sign { - --fa: "\e140"; } +.fa-volume-off { + --fa: "\f026"; +} -.fa-headset { - --fa: "\f590"; } +.fa-volume-low { + --fa: "\f027"; +} -.fa-store-slash { - --fa: "\e071"; } +.fa-volume-down { + --fa: "\f027"; +} -.fa-road-circle-xmark { - --fa: "\e566"; } +.fa-volume-high { + --fa: "\f028"; +} -.fa-user-minus { - --fa: "\f503"; } +.fa-volume-up { + --fa: "\f028"; +} -.fa-mars-stroke-up { - --fa: "\f22a"; } +.fa-qrcode { + --fa: "\f029"; +} -.fa-mars-stroke-v { - --fa: "\f22a"; } +.fa-barcode { + --fa: "\f02a"; +} -.fa-champagne-glasses { - --fa: "\f79f"; } +.fa-tag { + --fa: "\f02b"; +} -.fa-glass-cheers { - --fa: "\f79f"; } +.fa-tags { + --fa: "\f02c"; +} -.fa-clipboard { - --fa: "\f328"; } +.fa-book { + --fa: "\f02d"; +} -.fa-house-circle-exclamation { - --fa: "\e50a"; } +.fa-bookmark { + --fa: "\f02e"; +} -.fa-file-arrow-up { - --fa: "\f574"; } +.fa-print { + --fa: "\f02f"; +} -.fa-file-upload { - --fa: "\f574"; } +.fa-camera { + --fa: "\f030"; +} -.fa-wifi { - --fa: "\f1eb"; } +.fa-camera-alt { + --fa: "\f030"; +} -.fa-wifi-3 { - --fa: "\f1eb"; } +.fa-font { + --fa: "\f031"; +} -.fa-wifi-strong { - --fa: "\f1eb"; } +.fa-bold { + --fa: "\f032"; +} -.fa-bath { - --fa: "\f2cd"; } +.fa-italic { + --fa: "\f033"; +} -.fa-bathtub { - --fa: "\f2cd"; } +.fa-text-height { + --fa: "\f034"; +} -.fa-underline { - --fa: "\f0cd"; } +.fa-text-width { + --fa: "\f035"; +} -.fa-user-pen { - --fa: "\f4ff"; } +.fa-align-left { + --fa: "\f036"; +} -.fa-user-edit { - --fa: "\f4ff"; } +.fa-align-center { + --fa: "\f037"; +} -.fa-signature { - --fa: "\f5b7"; } +.fa-align-right { + --fa: "\f038"; +} -.fa-stroopwafel { - --fa: "\f551"; } +.fa-align-justify { + --fa: "\f039"; +} -.fa-bold { - --fa: "\f032"; } +.fa-list { + --fa: "\f03a"; +} -.fa-anchor-lock { - --fa: "\e4ad"; } +.fa-list-squares { + --fa: "\f03a"; +} -.fa-building-ngo { - --fa: "\e4d7"; } +.fa-outdent { + --fa: "\f03b"; +} -.fa-manat-sign { - --fa: "\e1d5"; } +.fa-dedent { + --fa: "\f03b"; +} -.fa-not-equal { - --fa: "\f53e"; } +.fa-indent { + --fa: "\f03c"; +} -.fa-border-top-left { - --fa: "\f853"; } +.fa-video { + --fa: "\f03d"; +} -.fa-border-style { - --fa: "\f853"; } +.fa-video-camera { + --fa: "\f03d"; +} -.fa-map-location-dot { - --fa: "\f5a0"; } +.fa-image { + --fa: "\f03e"; +} -.fa-map-marked-alt { - --fa: "\f5a0"; } +.fa-location-pin { + --fa: "\f041"; +} -.fa-jedi { - --fa: "\f669"; } +.fa-map-marker { + --fa: "\f041"; +} -.fa-square-poll-vertical { - --fa: "\f681"; } +.fa-circle-half-stroke { + --fa: "\f042"; +} -.fa-poll { - --fa: "\f681"; } +.fa-adjust { + --fa: "\f042"; +} -.fa-mug-hot { - --fa: "\f7b6"; } +.fa-droplet { + --fa: "\f043"; +} -.fa-car-battery { - --fa: "\f5df"; } +.fa-tint { + --fa: "\f043"; +} -.fa-battery-car { - --fa: "\f5df"; } +.fa-pen-to-square { + --fa: "\f044"; +} -.fa-gift { - --fa: "\f06b"; } +.fa-edit { + --fa: "\f044"; +} -.fa-dice-two { - --fa: "\f528"; } +.fa-arrows-up-down-left-right { + --fa: "\f047"; +} -.fa-chess-queen { - --fa: "\f445"; } +.fa-arrows { + --fa: "\f047"; +} -.fa-glasses { - --fa: "\f530"; } +.fa-backward-step { + --fa: "\f048"; +} -.fa-chess-board { - --fa: "\f43c"; } +.fa-step-backward { + --fa: "\f048"; +} -.fa-building-circle-check { - --fa: "\e4d2"; } +.fa-backward-fast { + --fa: "\f049"; +} -.fa-person-chalkboard { - --fa: "\e53d"; } +.fa-fast-backward { + --fa: "\f049"; +} -.fa-mars-stroke-right { - --fa: "\f22b"; } +.fa-backward { + --fa: "\f04a"; +} -.fa-mars-stroke-h { - --fa: "\f22b"; } +.fa-play { + --fa: "\f04b"; +} -.fa-hand-back-fist { - --fa: "\f255"; } +.fa-pause { + --fa: "\f04c"; +} -.fa-hand-rock { - --fa: "\f255"; } +.fa-stop { + --fa: "\f04d"; +} -.fa-square-caret-up { - --fa: "\f151"; } +.fa-forward { + --fa: "\f04e"; +} -.fa-caret-square-up { - --fa: "\f151"; } +.fa-forward-fast { + --fa: "\f050"; +} -.fa-cloud-showers-water { - --fa: "\e4e4"; } +.fa-fast-forward { + --fa: "\f050"; +} -.fa-chart-bar { - --fa: "\f080"; } +.fa-forward-step { + --fa: "\f051"; +} -.fa-bar-chart { - --fa: "\f080"; } +.fa-step-forward { + --fa: "\f051"; +} -.fa-hands-bubbles { - --fa: "\e05e"; } +.fa-eject { + --fa: "\f052"; +} -.fa-hands-wash { - --fa: "\e05e"; } +.fa-chevron-left { + --fa: "\f053"; +} -.fa-less-than-equal { - --fa: "\f537"; } +.fa-chevron-right { + --fa: "\f054"; +} -.fa-train { - --fa: "\f238"; } +.fa-circle-plus { + --fa: "\f055"; +} -.fa-eye-low-vision { - --fa: "\f2a8"; } +.fa-plus-circle { + --fa: "\f055"; +} -.fa-low-vision { - --fa: "\f2a8"; } +.fa-circle-minus { + --fa: "\f056"; +} -.fa-crow { - --fa: "\f520"; } +.fa-minus-circle { + --fa: "\f056"; +} -.fa-sailboat { - --fa: "\e445"; } +.fa-circle-xmark { + --fa: "\f057"; +} -.fa-window-restore { - --fa: "\f2d2"; } +.fa-times-circle { + --fa: "\f057"; +} -.fa-square-plus { - --fa: "\f0fe"; } +.fa-xmark-circle { + --fa: "\f057"; +} -.fa-plus-square { - --fa: "\f0fe"; } +.fa-circle-check { + --fa: "\f058"; +} -.fa-torii-gate { - --fa: "\f6a1"; } +.fa-check-circle { + --fa: "\f058"; +} -.fa-frog { - --fa: "\f52e"; } +.fa-circle-question { + --fa: "\f059"; +} -.fa-bucket { - --fa: "\e4cf"; } +.fa-question-circle { + --fa: "\f059"; +} -.fa-image { - --fa: "\f03e"; } +.fa-circle-info { + --fa: "\f05a"; +} -.fa-microphone { - --fa: "\f130"; } +.fa-info-circle { + --fa: "\f05a"; +} -.fa-cow { - --fa: "\f6c8"; } +.fa-crosshairs { + --fa: "\f05b"; +} -.fa-caret-up { - --fa: "\f0d8"; } +.fa-ban { + --fa: "\f05e"; +} -.fa-screwdriver { - --fa: "\f54a"; } +.fa-cancel { + --fa: "\f05e"; +} -.fa-folder-closed { - --fa: "\e185"; } +.fa-arrow-left { + --fa: "\f060"; +} -.fa-house-tsunami { - --fa: "\e515"; } +.fa-arrow-right { + --fa: "\f061"; +} -.fa-square-nfi { - --fa: "\e576"; } +.fa-arrow-up { + --fa: "\f062"; +} -.fa-arrow-up-from-ground-water { - --fa: "\e4b5"; } +.fa-arrow-down { + --fa: "\f063"; +} -.fa-martini-glass { - --fa: "\f57b"; } +.fa-share { + --fa: "\f064"; +} -.fa-glass-martini-alt { - --fa: "\f57b"; } +.fa-mail-forward { + --fa: "\f064"; +} -.fa-square-binary { - --fa: "\e69b"; } +.fa-expand { + --fa: "\f065"; +} -.fa-rotate-left { - --fa: "\f2ea"; } +.fa-compress { + --fa: "\f066"; +} -.fa-rotate-back { - --fa: "\f2ea"; } +.fa-minus { + --fa: "\f068"; +} -.fa-rotate-backward { - --fa: "\f2ea"; } +.fa-subtract { + --fa: "\f068"; +} -.fa-undo-alt { - --fa: "\f2ea"; } +.fa-circle-exclamation { + --fa: "\f06a"; +} -.fa-table-columns { - --fa: "\f0db"; } +.fa-exclamation-circle { + --fa: "\f06a"; +} -.fa-columns { - --fa: "\f0db"; } +.fa-gift { + --fa: "\f06b"; +} -.fa-lemon { - --fa: "\f094"; } +.fa-leaf { + --fa: "\f06c"; +} -.fa-head-side-mask { - --fa: "\e063"; } +.fa-fire { + --fa: "\f06d"; +} -.fa-handshake { - --fa: "\f2b5"; } +.fa-eye { + --fa: "\f06e"; +} -.fa-gem { - --fa: "\f3a5"; } +.fa-eye-slash { + --fa: "\f070"; +} -.fa-dolly { - --fa: "\f472"; } +.fa-triangle-exclamation { + --fa: "\f071"; +} -.fa-dolly-box { - --fa: "\f472"; } +.fa-exclamation-triangle { + --fa: "\f071"; +} -.fa-smoking { - --fa: "\f48d"; } +.fa-warning { + --fa: "\f071"; +} -.fa-minimize { - --fa: "\f78c"; } +.fa-plane { + --fa: "\f072"; +} -.fa-compress-arrows-alt { - --fa: "\f78c"; } +.fa-calendar-days { + --fa: "\f073"; +} -.fa-monument { - --fa: "\f5a6"; } +.fa-calendar-alt { + --fa: "\f073"; +} -.fa-snowplow { - --fa: "\f7d2"; } +.fa-shuffle { + --fa: "\f074"; +} -.fa-angles-right { - --fa: "\f101"; } +.fa-random { + --fa: "\f074"; +} -.fa-angle-double-right { - --fa: "\f101"; } +.fa-comment { + --fa: "\f075"; +} -.fa-cannabis { - --fa: "\f55f"; } +.fa-magnet { + --fa: "\f076"; +} -.fa-circle-play { - --fa: "\f144"; } +.fa-chevron-up { + --fa: "\f077"; +} -.fa-play-circle { - --fa: "\f144"; } +.fa-chevron-down { + --fa: "\f078"; +} -.fa-tablets { - --fa: "\f490"; } +.fa-retweet { + --fa: "\f079"; +} -.fa-ethernet { - --fa: "\f796"; } +.fa-cart-shopping { + --fa: "\f07a"; +} -.fa-euro-sign { - --fa: "\f153"; } +.fa-shopping-cart { + --fa: "\f07a"; +} -.fa-eur { - --fa: "\f153"; } +.fa-folder { + --fa: "\f07b"; +} -.fa-euro { - --fa: "\f153"; } +.fa-folder-blank { + --fa: "\f07b"; +} -.fa-chair { - --fa: "\f6c0"; } +.fa-folder-open { + --fa: "\f07c"; +} -.fa-circle-check { - --fa: "\f058"; } +.fa-arrows-up-down { + --fa: "\f07d"; +} -.fa-check-circle { - --fa: "\f058"; } +.fa-arrows-v { + --fa: "\f07d"; +} -.fa-circle-stop { - --fa: "\f28d"; } +.fa-arrows-left-right { + --fa: "\f07e"; +} -.fa-stop-circle { - --fa: "\f28d"; } +.fa-arrows-h { + --fa: "\f07e"; +} -.fa-compass-drafting { - --fa: "\f568"; } +.fa-chart-bar { + --fa: "\f080"; +} -.fa-drafting-compass { - --fa: "\f568"; } +.fa-bar-chart { + --fa: "\f080"; +} -.fa-plate-wheat { - --fa: "\e55a"; } +.fa-camera-retro { + --fa: "\f083"; +} -.fa-icicles { - --fa: "\f7ad"; } +.fa-key { + --fa: "\f084"; +} -.fa-person-shelter { - --fa: "\e54f"; } +.fa-gears { + --fa: "\f085"; +} -.fa-neuter { - --fa: "\f22c"; } +.fa-cogs { + --fa: "\f085"; +} -.fa-id-badge { - --fa: "\f2c1"; } +.fa-comments { + --fa: "\f086"; +} -.fa-marker { - --fa: "\f5a1"; } +.fa-star-half { + --fa: "\f089"; +} -.fa-face-laugh-beam { - --fa: "\f59a"; } +.fa-arrow-right-from-bracket { + --fa: "\f08b"; +} -.fa-laugh-beam { - --fa: "\f59a"; } +.fa-sign-out { + --fa: "\f08b"; +} -.fa-helicopter-symbol { - --fa: "\e502"; } +.fa-thumbtack { + --fa: "\f08d"; +} -.fa-universal-access { - --fa: "\f29a"; } +.fa-thumb-tack { + --fa: "\f08d"; +} -.fa-circle-chevron-up { - --fa: "\f139"; } +.fa-arrow-up-right-from-square { + --fa: "\f08e"; +} -.fa-chevron-circle-up { - --fa: "\f139"; } +.fa-external-link { + --fa: "\f08e"; +} -.fa-lari-sign { - --fa: "\e1c8"; } +.fa-arrow-right-to-bracket { + --fa: "\f090"; +} -.fa-volcano { - --fa: "\f770"; } +.fa-sign-in { + --fa: "\f090"; +} -.fa-person-walking-dashed-line-arrow-right { - --fa: "\e553"; } +.fa-trophy { + --fa: "\f091"; +} -.fa-sterling-sign { - --fa: "\f154"; } +.fa-upload { + --fa: "\f093"; +} -.fa-gbp { - --fa: "\f154"; } +.fa-lemon { + --fa: "\f094"; +} -.fa-pound-sign { - --fa: "\f154"; } +.fa-phone { + --fa: "\f095"; +} -.fa-viruses { - --fa: "\e076"; } +.fa-square-phone { + --fa: "\f098"; +} -.fa-square-person-confined { - --fa: "\e577"; } +.fa-phone-square { + --fa: "\f098"; +} -.fa-user-tie { - --fa: "\f508"; } +.fa-unlock { + --fa: "\f09c"; +} -.fa-arrow-down-long { - --fa: "\f175"; } +.fa-credit-card { + --fa: "\f09d"; +} -.fa-long-arrow-down { - --fa: "\f175"; } +.fa-credit-card-alt { + --fa: "\f09d"; +} -.fa-tent-arrow-down-to-line { - --fa: "\e57e"; } +.fa-rss { + --fa: "\f09e"; +} + +.fa-feed { + --fa: "\f09e"; +} + +.fa-hard-drive { + --fa: "\f0a0"; +} + +.fa-hdd { + --fa: "\f0a0"; +} + +.fa-bullhorn { + --fa: "\f0a1"; +} .fa-certificate { - --fa: "\f0a3"; } + --fa: "\f0a3"; +} -.fa-reply-all { - --fa: "\f122"; } +.fa-hand-point-right { + --fa: "\f0a4"; +} -.fa-mail-reply-all { - --fa: "\f122"; } +.fa-hand-point-left { + --fa: "\f0a5"; +} -.fa-suitcase { - --fa: "\f0f2"; } +.fa-hand-point-up { + --fa: "\f0a6"; +} -.fa-person-skating { - --fa: "\f7c5"; } +.fa-hand-point-down { + --fa: "\f0a7"; +} -.fa-skating { - --fa: "\f7c5"; } +.fa-circle-arrow-left { + --fa: "\f0a8"; +} -.fa-filter-circle-dollar { - --fa: "\f662"; } +.fa-arrow-circle-left { + --fa: "\f0a8"; +} -.fa-funnel-dollar { - --fa: "\f662"; } +.fa-circle-arrow-right { + --fa: "\f0a9"; +} -.fa-camera-retro { - --fa: "\f083"; } +.fa-arrow-circle-right { + --fa: "\f0a9"; +} + +.fa-circle-arrow-up { + --fa: "\f0aa"; +} + +.fa-arrow-circle-up { + --fa: "\f0aa"; +} .fa-circle-arrow-down { - --fa: "\f0ab"; } + --fa: "\f0ab"; +} .fa-arrow-circle-down { - --fa: "\f0ab"; } - -.fa-file-import { - --fa: "\f56f"; } + --fa: "\f0ab"; +} -.fa-arrow-right-to-file { - --fa: "\f56f"; } +.fa-globe { + --fa: "\f0ac"; +} -.fa-square-arrow-up-right { - --fa: "\f14c"; } +.fa-wrench { + --fa: "\f0ad"; +} -.fa-external-link-square { - --fa: "\f14c"; } +.fa-list-check { + --fa: "\f0ae"; +} -.fa-box-open { - --fa: "\f49e"; } +.fa-tasks { + --fa: "\f0ae"; +} -.fa-scroll { - --fa: "\f70e"; } +.fa-filter { + --fa: "\f0b0"; +} -.fa-spa { - --fa: "\f5bb"; } +.fa-briefcase { + --fa: "\f0b1"; +} -.fa-location-pin-lock { - --fa: "\e51f"; } +.fa-up-down-left-right { + --fa: "\f0b2"; +} -.fa-pause { - --fa: "\f04c"; } +.fa-arrows-alt { + --fa: "\f0b2"; +} -.fa-hill-avalanche { - --fa: "\e507"; } +.fa-users { + --fa: "\f0c0"; +} -.fa-temperature-empty { - --fa: "\f2cb"; } +.fa-link { + --fa: "\f0c1"; +} -.fa-temperature-0 { - --fa: "\f2cb"; } +.fa-chain { + --fa: "\f0c1"; +} -.fa-thermometer-0 { - --fa: "\f2cb"; } +.fa-cloud { + --fa: "\f0c2"; +} -.fa-thermometer-empty { - --fa: "\f2cb"; } +.fa-flask { + --fa: "\f0c3"; +} -.fa-bomb { - --fa: "\f1e2"; } +.fa-scissors { + --fa: "\f0c4"; +} -.fa-registered { - --fa: "\f25d"; } +.fa-cut { + --fa: "\f0c4"; +} -.fa-address-card { - --fa: "\f2bb"; } +.fa-copy { + --fa: "\f0c5"; +} -.fa-contact-card { - --fa: "\f2bb"; } +.fa-paperclip { + --fa: "\f0c6"; +} -.fa-vcard { - --fa: "\f2bb"; } +.fa-floppy-disk { + --fa: "\f0c7"; +} -.fa-scale-unbalanced-flip { - --fa: "\f516"; } +.fa-save { + --fa: "\f0c7"; +} -.fa-balance-scale-right { - --fa: "\f516"; } +.fa-square { + --fa: "\f0c8"; +} -.fa-subscript { - --fa: "\f12c"; } +.fa-bars { + --fa: "\f0c9"; +} -.fa-diamond-turn-right { - --fa: "\f5eb"; } +.fa-navicon { + --fa: "\f0c9"; +} -.fa-directions { - --fa: "\f5eb"; } +.fa-list-ul { + --fa: "\f0ca"; +} -.fa-burst { - --fa: "\e4dc"; } +.fa-list-dots { + --fa: "\f0ca"; +} -.fa-house-laptop { - --fa: "\e066"; } +.fa-list-ol { + --fa: "\f0cb"; +} -.fa-laptop-house { - --fa: "\e066"; } +.fa-list-1-2 { + --fa: "\f0cb"; +} -.fa-face-tired { - --fa: "\f5c8"; } +.fa-list-numeric { + --fa: "\f0cb"; +} -.fa-tired { - --fa: "\f5c8"; } +.fa-strikethrough { + --fa: "\f0cc"; +} -.fa-money-bills { - --fa: "\e1f3"; } +.fa-underline { + --fa: "\f0cd"; +} -.fa-smog { - --fa: "\f75f"; } +.fa-table { + --fa: "\f0ce"; +} -.fa-crutch { - --fa: "\f7f7"; } +.fa-wand-magic { + --fa: "\f0d0"; +} -.fa-cloud-arrow-up { - --fa: "\f0ee"; } +.fa-magic { + --fa: "\f0d0"; +} -.fa-cloud-upload { - --fa: "\f0ee"; } +.fa-truck { + --fa: "\f0d1"; +} -.fa-cloud-upload-alt { - --fa: "\f0ee"; } +.fa-money-bill { + --fa: "\f0d6"; +} -.fa-palette { - --fa: "\f53f"; } +.fa-caret-down { + --fa: "\f0d7"; +} -.fa-arrows-turn-right { - --fa: "\e4c0"; } +.fa-caret-up { + --fa: "\f0d8"; +} -.fa-vest { - --fa: "\e085"; } +.fa-caret-left { + --fa: "\f0d9"; +} -.fa-ferry { - --fa: "\e4ea"; } +.fa-caret-right { + --fa: "\f0da"; +} -.fa-arrows-down-to-people { - --fa: "\e4b9"; } +.fa-table-columns { + --fa: "\f0db"; +} -.fa-seedling { - --fa: "\f4d8"; } +.fa-columns { + --fa: "\f0db"; +} -.fa-sprout { - --fa: "\f4d8"; } +.fa-sort { + --fa: "\f0dc"; +} -.fa-left-right { - --fa: "\f337"; } +.fa-unsorted { + --fa: "\f0dc"; +} -.fa-arrows-alt-h { - --fa: "\f337"; } +.fa-sort-down { + --fa: "\f0dd"; +} -.fa-boxes-packing { - --fa: "\e4c7"; } +.fa-sort-desc { + --fa: "\f0dd"; +} -.fa-circle-arrow-left { - --fa: "\f0a8"; } +.fa-sort-up { + --fa: "\f0de"; +} -.fa-arrow-circle-left { - --fa: "\f0a8"; } +.fa-sort-asc { + --fa: "\f0de"; +} -.fa-group-arrows-rotate { - --fa: "\e4f6"; } +.fa-envelope { + --fa: "\f0e0"; +} -.fa-bowl-food { - --fa: "\e4c6"; } +.fa-arrow-rotate-left { + --fa: "\f0e2"; +} -.fa-candy-cane { - --fa: "\f786"; } +.fa-arrow-left-rotate { + --fa: "\f0e2"; +} -.fa-arrow-down-wide-short { - --fa: "\f160"; } +.fa-arrow-rotate-back { + --fa: "\f0e2"; +} -.fa-sort-amount-asc { - --fa: "\f160"; } +.fa-arrow-rotate-backward { + --fa: "\f0e2"; +} -.fa-sort-amount-down { - --fa: "\f160"; } +.fa-undo { + --fa: "\f0e2"; +} -.fa-cloud-bolt { - --fa: "\f76c"; } +.fa-gavel { + --fa: "\f0e3"; +} -.fa-thunderstorm { - --fa: "\f76c"; } +.fa-legal { + --fa: "\f0e3"; +} -.fa-text-slash { - --fa: "\f87d"; } +.fa-bolt { + --fa: "\f0e7"; +} -.fa-remove-format { - --fa: "\f87d"; } +.fa-zap { + --fa: "\f0e7"; +} -.fa-face-smile-wink { - --fa: "\f4da"; } +.fa-sitemap { + --fa: "\f0e8"; +} -.fa-smile-wink { - --fa: "\f4da"; } +.fa-umbrella { + --fa: "\f0e9"; +} -.fa-file-word { - --fa: "\f1c2"; } +.fa-paste { + --fa: "\f0ea"; +} -.fa-file-powerpoint { - --fa: "\f1c4"; } +.fa-file-clipboard { + --fa: "\f0ea"; +} -.fa-arrows-left-right { - --fa: "\f07e"; } +.fa-lightbulb { + --fa: "\f0eb"; +} -.fa-arrows-h { - --fa: "\f07e"; } +.fa-arrow-right-arrow-left { + --fa: "\f0ec"; +} -.fa-house-lock { - --fa: "\e510"; } +.fa-exchange { + --fa: "\f0ec"; +} .fa-cloud-arrow-down { - --fa: "\f0ed"; } + --fa: "\f0ed"; +} .fa-cloud-download { - --fa: "\f0ed"; } + --fa: "\f0ed"; +} .fa-cloud-download-alt { - --fa: "\f0ed"; } + --fa: "\f0ed"; +} -.fa-children { - --fa: "\e4e1"; } +.fa-cloud-arrow-up { + --fa: "\f0ee"; +} -.fa-chalkboard { - --fa: "\f51b"; } +.fa-cloud-upload { + --fa: "\f0ee"; +} -.fa-blackboard { - --fa: "\f51b"; } +.fa-cloud-upload-alt { + --fa: "\f0ee"; +} -.fa-user-large-slash { - --fa: "\f4fa"; } +.fa-user-doctor { + --fa: "\f0f0"; +} -.fa-user-alt-slash { - --fa: "\f4fa"; } +.fa-user-md { + --fa: "\f0f0"; +} -.fa-envelope-open { - --fa: "\f2b6"; } +.fa-stethoscope { + --fa: "\f0f1"; +} -.fa-handshake-simple-slash { - --fa: "\e05f"; } +.fa-suitcase { + --fa: "\f0f2"; +} -.fa-handshake-alt-slash { - --fa: "\e05f"; } +.fa-bell { + --fa: "\f0f3"; +} -.fa-mattress-pillow { - --fa: "\e525"; } +.fa-mug-saucer { + --fa: "\f0f4"; +} -.fa-guarani-sign { - --fa: "\e19a"; } +.fa-coffee { + --fa: "\f0f4"; +} -.fa-arrows-rotate { - --fa: "\f021"; } +.fa-hospital { + --fa: "\f0f8"; +} -.fa-refresh { - --fa: "\f021"; } +.fa-hospital-alt { + --fa: "\f0f8"; +} -.fa-sync { - --fa: "\f021"; } +.fa-hospital-wide { + --fa: "\f0f8"; +} -.fa-fire-extinguisher { - --fa: "\f134"; } +.fa-truck-medical { + --fa: "\f0f9"; +} -.fa-cruzeiro-sign { - --fa: "\e152"; } +.fa-ambulance { + --fa: "\f0f9"; +} -.fa-greater-than-equal { - --fa: "\f532"; } +.fa-suitcase-medical { + --fa: "\f0fa"; +} -.fa-shield-halved { - --fa: "\f3ed"; } +.fa-medkit { + --fa: "\f0fa"; +} -.fa-shield-alt { - --fa: "\f3ed"; } +.fa-jet-fighter { + --fa: "\f0fb"; +} -.fa-book-atlas { - --fa: "\f558"; } +.fa-fighter-jet { + --fa: "\f0fb"; +} -.fa-atlas { - --fa: "\f558"; } +.fa-beer-mug-empty { + --fa: "\f0fc"; +} -.fa-virus { - --fa: "\e074"; } +.fa-beer { + --fa: "\f0fc"; +} -.fa-envelope-circle-check { - --fa: "\e4e8"; } +.fa-square-h { + --fa: "\f0fd"; +} -.fa-layer-group { - --fa: "\f5fd"; } +.fa-h-square { + --fa: "\f0fd"; +} -.fa-arrows-to-dot { - --fa: "\e4be"; } +.fa-square-plus { + --fa: "\f0fe"; +} -.fa-archway { - --fa: "\f557"; } +.fa-plus-square { + --fa: "\f0fe"; +} -.fa-heart-circle-check { - --fa: "\e4fd"; } +.fa-angles-left { + --fa: "\f100"; +} -.fa-house-chimney-crack { - --fa: "\f6f1"; } +.fa-angle-double-left { + --fa: "\f100"; +} -.fa-house-damage { - --fa: "\f6f1"; } +.fa-angles-right { + --fa: "\f101"; +} -.fa-file-zipper { - --fa: "\f1c6"; } +.fa-angle-double-right { + --fa: "\f101"; +} -.fa-file-archive { - --fa: "\f1c6"; } +.fa-angles-up { + --fa: "\f102"; +} -.fa-square { - --fa: "\f0c8"; } +.fa-angle-double-up { + --fa: "\f102"; +} -.fa-martini-glass-empty { - --fa: "\f000"; } +.fa-angles-down { + --fa: "\f103"; +} -.fa-glass-martini { - --fa: "\f000"; } +.fa-angle-double-down { + --fa: "\f103"; +} -.fa-couch { - --fa: "\f4b8"; } +.fa-angle-left { + --fa: "\f104"; +} -.fa-cedi-sign { - --fa: "\e0df"; } +.fa-angle-right { + --fa: "\f105"; +} -.fa-italic { - --fa: "\f033"; } +.fa-angle-up { + --fa: "\f106"; +} -.fa-table-cells-column-lock { - --fa: "\e678"; } +.fa-angle-down { + --fa: "\f107"; +} -.fa-church { - --fa: "\f51d"; } +.fa-laptop { + --fa: "\f109"; +} -.fa-comments-dollar { - --fa: "\f653"; } +.fa-tablet-button { + --fa: "\f10a"; +} -.fa-democrat { - --fa: "\f747"; } +.fa-mobile-button { + --fa: "\f10b"; +} -.fa-z { - --fa: "\5a"; } +.fa-quote-left { + --fa: "\f10d"; +} -.fa-person-skiing { - --fa: "\f7c9"; } +.fa-quote-left-alt { + --fa: "\f10d"; +} -.fa-skiing { - --fa: "\f7c9"; } +.fa-quote-right { + --fa: "\f10e"; +} -.fa-road-lock { - --fa: "\e567"; } +.fa-quote-right-alt { + --fa: "\f10e"; +} -.fa-a { - --fa: "\41"; } +.fa-spinner { + --fa: "\f110"; +} -.fa-temperature-arrow-down { - --fa: "\e03f"; } +.fa-circle { + --fa: "\f111"; +} -.fa-temperature-down { - --fa: "\e03f"; } +.fa-face-smile { + --fa: "\f118"; +} -.fa-feather-pointed { - --fa: "\f56b"; } +.fa-smile { + --fa: "\f118"; +} -.fa-feather-alt { - --fa: "\f56b"; } +.fa-face-frown { + --fa: "\f119"; +} -.fa-p { - --fa: "\50"; } +.fa-frown { + --fa: "\f119"; +} -.fa-snowflake { - --fa: "\f2dc"; } +.fa-face-meh { + --fa: "\f11a"; +} -.fa-newspaper { - --fa: "\f1ea"; } +.fa-meh { + --fa: "\f11a"; +} -.fa-rectangle-ad { - --fa: "\f641"; } +.fa-gamepad { + --fa: "\f11b"; +} -.fa-ad { - --fa: "\f641"; } +.fa-keyboard { + --fa: "\f11c"; +} -.fa-circle-arrow-right { - --fa: "\f0a9"; } +.fa-flag-checkered { + --fa: "\f11e"; +} -.fa-arrow-circle-right { - --fa: "\f0a9"; } +.fa-terminal { + --fa: "\f120"; +} -.fa-filter-circle-xmark { - --fa: "\e17b"; } +.fa-code { + --fa: "\f121"; +} -.fa-locust { - --fa: "\e520"; } +.fa-reply-all { + --fa: "\f122"; +} -.fa-sort { - --fa: "\f0dc"; } +.fa-mail-reply-all { + --fa: "\f122"; +} -.fa-unsorted { - --fa: "\f0dc"; } +.fa-location-arrow { + --fa: "\f124"; +} -.fa-list-ol { - --fa: "\f0cb"; } +.fa-crop { + --fa: "\f125"; +} -.fa-list-1-2 { - --fa: "\f0cb"; } +.fa-code-branch { + --fa: "\f126"; +} -.fa-list-numeric { - --fa: "\f0cb"; } +.fa-link-slash { + --fa: "\f127"; +} -.fa-person-dress-burst { - --fa: "\e544"; } +.fa-chain-broken { + --fa: "\f127"; +} -.fa-money-check-dollar { - --fa: "\f53d"; } +.fa-chain-slash { + --fa: "\f127"; +} -.fa-money-check-alt { - --fa: "\f53d"; } +.fa-unlink { + --fa: "\f127"; +} -.fa-vector-square { - --fa: "\f5cb"; } +.fa-info { + --fa: "\f129"; +} -.fa-bread-slice { - --fa: "\f7ec"; } +.fa-superscript { + --fa: "\f12b"; +} -.fa-language { - --fa: "\f1ab"; } +.fa-subscript { + --fa: "\f12c"; +} -.fa-face-kiss-wink-heart { - --fa: "\f598"; } +.fa-eraser { + --fa: "\f12d"; +} -.fa-kiss-wink-heart { - --fa: "\f598"; } +.fa-puzzle-piece { + --fa: "\f12e"; +} -.fa-filter { - --fa: "\f0b0"; } +.fa-microphone { + --fa: "\f130"; +} -.fa-question { - --fa: "\3f"; } +.fa-microphone-slash { + --fa: "\f131"; +} -.fa-file-signature { - --fa: "\f573"; } +.fa-shield { + --fa: "\f132"; +} -.fa-up-down-left-right { - --fa: "\f0b2"; } +.fa-shield-blank { + --fa: "\f132"; +} -.fa-arrows-alt { - --fa: "\f0b2"; } +.fa-calendar { + --fa: "\f133"; +} -.fa-house-chimney-user { - --fa: "\e065"; } +.fa-fire-extinguisher { + --fa: "\f134"; +} -.fa-hand-holding-heart { - --fa: "\f4be"; } +.fa-rocket { + --fa: "\f135"; +} -.fa-puzzle-piece { - --fa: "\f12e"; } +.fa-circle-chevron-left { + --fa: "\f137"; +} -.fa-money-check { - --fa: "\f53c"; } +.fa-chevron-circle-left { + --fa: "\f137"; +} -.fa-star-half-stroke { - --fa: "\f5c0"; } +.fa-circle-chevron-right { + --fa: "\f138"; +} -.fa-star-half-alt { - --fa: "\f5c0"; } +.fa-chevron-circle-right { + --fa: "\f138"; +} -.fa-code { - --fa: "\f121"; } +.fa-circle-chevron-up { + --fa: "\f139"; +} -.fa-whiskey-glass { - --fa: "\f7a0"; } +.fa-chevron-circle-up { + --fa: "\f139"; +} -.fa-glass-whiskey { - --fa: "\f7a0"; } +.fa-circle-chevron-down { + --fa: "\f13a"; +} -.fa-building-circle-exclamation { - --fa: "\e4d3"; } +.fa-chevron-circle-down { + --fa: "\f13a"; +} -.fa-magnifying-glass-chart { - --fa: "\e522"; } +.fa-anchor { + --fa: "\f13d"; +} -.fa-arrow-up-right-from-square { - --fa: "\f08e"; } +.fa-unlock-keyhole { + --fa: "\f13e"; +} -.fa-external-link { - --fa: "\f08e"; } +.fa-unlock-alt { + --fa: "\f13e"; +} -.fa-cubes-stacked { - --fa: "\e4e6"; } +.fa-bullseye { + --fa: "\f140"; +} -.fa-won-sign { - --fa: "\f159"; } +.fa-ellipsis { + --fa: "\f141"; +} -.fa-krw { - --fa: "\f159"; } +.fa-ellipsis-h { + --fa: "\f141"; +} -.fa-won { - --fa: "\f159"; } +.fa-ellipsis-vertical { + --fa: "\f142"; +} -.fa-virus-covid { - --fa: "\e4a8"; } +.fa-ellipsis-v { + --fa: "\f142"; +} -.fa-austral-sign { - --fa: "\e0a9"; } +.fa-square-rss { + --fa: "\f143"; +} -.fa-f { - --fa: "\46"; } +.fa-rss-square { + --fa: "\f143"; +} -.fa-leaf { - --fa: "\f06c"; } +.fa-circle-play { + --fa: "\f144"; +} -.fa-road { - --fa: "\f018"; } +.fa-play-circle { + --fa: "\f144"; +} -.fa-taxi { - --fa: "\f1ba"; } +.fa-ticket { + --fa: "\f145"; +} -.fa-cab { - --fa: "\f1ba"; } +.fa-square-minus { + --fa: "\f146"; +} -.fa-person-circle-plus { - --fa: "\e541"; } +.fa-minus-square { + --fa: "\f146"; +} -.fa-chart-pie { - --fa: "\f200"; } +.fa-arrow-turn-up { + --fa: "\f148"; +} -.fa-pie-chart { - --fa: "\f200"; } +.fa-level-up { + --fa: "\f148"; +} -.fa-bolt-lightning { - --fa: "\e0b7"; } +.fa-arrow-turn-down { + --fa: "\f149"; +} -.fa-sack-xmark { - --fa: "\e56a"; } +.fa-level-down { + --fa: "\f149"; +} -.fa-file-excel { - --fa: "\f1c3"; } +.fa-square-check { + --fa: "\f14a"; +} -.fa-file-contract { - --fa: "\f56c"; } +.fa-check-square { + --fa: "\f14a"; +} -.fa-fish-fins { - --fa: "\e4f2"; } +.fa-square-pen { + --fa: "\f14b"; +} -.fa-building-flag { - --fa: "\e4d5"; } +.fa-pen-square { + --fa: "\f14b"; +} -.fa-face-grin-beam { - --fa: "\f582"; } +.fa-pencil-square { + --fa: "\f14b"; +} -.fa-grin-beam { - --fa: "\f582"; } +.fa-square-arrow-up-right { + --fa: "\f14c"; +} -.fa-object-ungroup { - --fa: "\f248"; } +.fa-external-link-square { + --fa: "\f14c"; +} -.fa-poop { - --fa: "\f619"; } +.fa-share-from-square { + --fa: "\f14d"; +} -.fa-location-pin { - --fa: "\f041"; } +.fa-share-square { + --fa: "\f14d"; +} -.fa-map-marker { - --fa: "\f041"; } +.fa-compass { + --fa: "\f14e"; +} -.fa-kaaba { - --fa: "\f66b"; } +.fa-square-caret-down { + --fa: "\f150"; +} -.fa-toilet-paper { - --fa: "\f71e"; } +.fa-caret-square-down { + --fa: "\f150"; +} -.fa-helmet-safety { - --fa: "\f807"; } +.fa-square-caret-up { + --fa: "\f151"; +} -.fa-hard-hat { - --fa: "\f807"; } +.fa-caret-square-up { + --fa: "\f151"; +} -.fa-hat-hard { - --fa: "\f807"; } +.fa-square-caret-right { + --fa: "\f152"; +} -.fa-eject { - --fa: "\f052"; } +.fa-caret-square-right { + --fa: "\f152"; +} -.fa-circle-right { - --fa: "\f35a"; } +.fa-euro-sign { + --fa: "\f153"; +} -.fa-arrow-alt-circle-right { - --fa: "\f35a"; } +.fa-eur { + --fa: "\f153"; +} -.fa-plane-circle-check { - --fa: "\e555"; } +.fa-euro { + --fa: "\f153"; +} -.fa-face-rolling-eyes { - --fa: "\f5a5"; } +.fa-sterling-sign { + --fa: "\f154"; +} -.fa-meh-rolling-eyes { - --fa: "\f5a5"; } +.fa-gbp { + --fa: "\f154"; +} -.fa-object-group { - --fa: "\f247"; } +.fa-pound-sign { + --fa: "\f154"; +} -.fa-chart-line { - --fa: "\f201"; } +.fa-rupee-sign { + --fa: "\f156"; +} -.fa-line-chart { - --fa: "\f201"; } +.fa-rupee { + --fa: "\f156"; +} -.fa-mask-ventilator { - --fa: "\e524"; } +.fa-yen-sign { + --fa: "\f157"; +} -.fa-arrow-right { - --fa: "\f061"; } +.fa-cny { + --fa: "\f157"; +} -.fa-signs-post { - --fa: "\f277"; } +.fa-jpy { + --fa: "\f157"; +} -.fa-map-signs { - --fa: "\f277"; } +.fa-rmb { + --fa: "\f157"; +} -.fa-cash-register { - --fa: "\f788"; } +.fa-yen { + --fa: "\f157"; +} -.fa-person-circle-question { - --fa: "\e542"; } +.fa-ruble-sign { + --fa: "\f158"; +} -.fa-h { - --fa: "\48"; } +.fa-rouble { + --fa: "\f158"; +} -.fa-tarp { - --fa: "\e57b"; } +.fa-rub { + --fa: "\f158"; +} -.fa-screwdriver-wrench { - --fa: "\f7d9"; } +.fa-ruble { + --fa: "\f158"; +} -.fa-tools { - --fa: "\f7d9"; } +.fa-won-sign { + --fa: "\f159"; +} -.fa-arrows-to-eye { - --fa: "\e4bf"; } +.fa-krw { + --fa: "\f159"; +} -.fa-plug-circle-bolt { - --fa: "\e55b"; } +.fa-won { + --fa: "\f159"; +} -.fa-heart { - --fa: "\f004"; } +.fa-file { + --fa: "\f15b"; +} -.fa-mars-and-venus { - --fa: "\f224"; } +.fa-file-lines { + --fa: "\f15c"; +} -.fa-house-user { - --fa: "\e1b0"; } +.fa-file-alt { + --fa: "\f15c"; +} -.fa-home-user { - --fa: "\e1b0"; } +.fa-file-text { + --fa: "\f15c"; +} -.fa-dumpster-fire { - --fa: "\f794"; } +.fa-arrow-down-a-z { + --fa: "\f15d"; +} -.fa-house-crack { - --fa: "\e3b1"; } +.fa-sort-alpha-asc { + --fa: "\f15d"; +} -.fa-martini-glass-citrus { - --fa: "\f561"; } +.fa-sort-alpha-down { + --fa: "\f15d"; +} -.fa-cocktail { - --fa: "\f561"; } +.fa-arrow-up-a-z { + --fa: "\f15e"; +} -.fa-face-surprise { - --fa: "\f5c2"; } +.fa-sort-alpha-up { + --fa: "\f15e"; +} -.fa-surprise { - --fa: "\f5c2"; } +.fa-arrow-down-wide-short { + --fa: "\f160"; +} -.fa-bottle-water { - --fa: "\e4c5"; } +.fa-sort-amount-asc { + --fa: "\f160"; +} -.fa-circle-pause { - --fa: "\f28b"; } +.fa-sort-amount-down { + --fa: "\f160"; +} -.fa-pause-circle { - --fa: "\f28b"; } +.fa-arrow-up-wide-short { + --fa: "\f161"; +} -.fa-toilet-paper-slash { - --fa: "\e072"; } +.fa-sort-amount-up { + --fa: "\f161"; +} -.fa-apple-whole { - --fa: "\f5d1"; } +.fa-arrow-down-1-9 { + --fa: "\f162"; +} -.fa-apple-alt { - --fa: "\f5d1"; } +.fa-sort-numeric-asc { + --fa: "\f162"; +} -.fa-kitchen-set { - --fa: "\e51a"; } +.fa-sort-numeric-down { + --fa: "\f162"; +} -.fa-r { - --fa: "\52"; } +.fa-arrow-up-1-9 { + --fa: "\f163"; +} -.fa-temperature-quarter { - --fa: "\f2ca"; } +.fa-sort-numeric-up { + --fa: "\f163"; +} -.fa-temperature-1 { - --fa: "\f2ca"; } +.fa-thumbs-up { + --fa: "\f164"; +} -.fa-thermometer-1 { - --fa: "\f2ca"; } +.fa-thumbs-down { + --fa: "\f165"; +} -.fa-thermometer-quarter { - --fa: "\f2ca"; } +.fa-arrow-down-long { + --fa: "\f175"; +} -.fa-cube { - --fa: "\f1b2"; } +.fa-long-arrow-down { + --fa: "\f175"; +} -.fa-bitcoin-sign { - --fa: "\e0b4"; } +.fa-arrow-up-long { + --fa: "\f176"; +} -.fa-shield-dog { - --fa: "\e573"; } +.fa-long-arrow-up { + --fa: "\f176"; +} -.fa-solar-panel { - --fa: "\f5ba"; } +.fa-arrow-left-long { + --fa: "\f177"; +} -.fa-lock-open { - --fa: "\f3c1"; } +.fa-long-arrow-left { + --fa: "\f177"; +} -.fa-elevator { - --fa: "\e16d"; } +.fa-arrow-right-long { + --fa: "\f178"; +} -.fa-money-bill-transfer { - --fa: "\e528"; } +.fa-long-arrow-right { + --fa: "\f178"; +} -.fa-money-bill-trend-up { - --fa: "\e529"; } +.fa-person-dress { + --fa: "\f182"; +} -.fa-house-flood-water-circle-arrow-right { - --fa: "\e50f"; } +.fa-female { + --fa: "\f182"; +} -.fa-square-poll-horizontal { - --fa: "\f682"; } +.fa-person { + --fa: "\f183"; +} -.fa-poll-h { - --fa: "\f682"; } +.fa-male { + --fa: "\f183"; +} -.fa-circle { - --fa: "\f111"; } +.fa-sun { + --fa: "\f185"; +} -.fa-backward-fast { - --fa: "\f049"; } +.fa-moon { + --fa: "\f186"; +} -.fa-fast-backward { - --fa: "\f049"; } - -.fa-recycle { - --fa: "\f1b8"; } - -.fa-user-astronaut { - --fa: "\f4fb"; } +.fa-box-archive { + --fa: "\f187"; +} -.fa-plane-slash { - --fa: "\e069"; } +.fa-archive { + --fa: "\f187"; +} -.fa-trademark { - --fa: "\f25c"; } +.fa-bug { + --fa: "\f188"; +} -.fa-basketball { - --fa: "\f434"; } +.fa-square-caret-left { + --fa: "\f191"; +} -.fa-basketball-ball { - --fa: "\f434"; } +.fa-caret-square-left { + --fa: "\f191"; +} -.fa-satellite-dish { - --fa: "\f7c0"; } +.fa-circle-dot { + --fa: "\f192"; +} -.fa-circle-up { - --fa: "\f35b"; } +.fa-dot-circle { + --fa: "\f192"; +} -.fa-arrow-alt-circle-up { - --fa: "\f35b"; } +.fa-wheelchair { + --fa: "\f193"; +} -.fa-mobile-screen-button { - --fa: "\f3cd"; } +.fa-lira-sign { + --fa: "\f195"; +} -.fa-mobile-alt { - --fa: "\f3cd"; } +.fa-shuttle-space { + --fa: "\f197"; +} -.fa-volume-high { - --fa: "\f028"; } +.fa-space-shuttle { + --fa: "\f197"; +} -.fa-volume-up { - --fa: "\f028"; } +.fa-square-envelope { + --fa: "\f199"; +} -.fa-users-rays { - --fa: "\e593"; } +.fa-envelope-square { + --fa: "\f199"; +} -.fa-wallet { - --fa: "\f555"; } +.fa-building-columns { + --fa: "\f19c"; +} -.fa-clipboard-check { - --fa: "\f46c"; } +.fa-bank { + --fa: "\f19c"; +} -.fa-file-audio { - --fa: "\f1c7"; } +.fa-institution { + --fa: "\f19c"; +} -.fa-burger { - --fa: "\f805"; } +.fa-museum { + --fa: "\f19c"; +} -.fa-hamburger { - --fa: "\f805"; } +.fa-university { + --fa: "\f19c"; +} -.fa-wrench { - --fa: "\f0ad"; } +.fa-graduation-cap { + --fa: "\f19d"; +} -.fa-bugs { - --fa: "\e4d0"; } +.fa-mortar-board { + --fa: "\f19d"; +} -.fa-rupee-sign { - --fa: "\f156"; } +.fa-language { + --fa: "\f1ab"; +} -.fa-rupee { - --fa: "\f156"; } +.fa-fax { + --fa: "\f1ac"; +} -.fa-file-image { - --fa: "\f1c5"; } +.fa-building { + --fa: "\f1ad"; +} -.fa-circle-question { - --fa: "\f059"; } +.fa-child { + --fa: "\f1ae"; +} -.fa-question-circle { - --fa: "\f059"; } +.fa-paw { + --fa: "\f1b0"; +} -.fa-plane-departure { - --fa: "\f5b0"; } +.fa-cube { + --fa: "\f1b2"; +} -.fa-handshake-slash { - --fa: "\e060"; } +.fa-cubes { + --fa: "\f1b3"; +} -.fa-book-bookmark { - --fa: "\e0bb"; } +.fa-recycle { + --fa: "\f1b8"; +} -.fa-code-branch { - --fa: "\f126"; } +.fa-car { + --fa: "\f1b9"; +} -.fa-hat-cowboy { - --fa: "\f8c0"; } +.fa-automobile { + --fa: "\f1b9"; +} -.fa-bridge { - --fa: "\e4c8"; } +.fa-taxi { + --fa: "\f1ba"; +} -.fa-phone-flip { - --fa: "\f879"; } +.fa-cab { + --fa: "\f1ba"; +} -.fa-phone-alt { - --fa: "\f879"; } +.fa-tree { + --fa: "\f1bb"; +} -.fa-truck-front { - --fa: "\e2b7"; } +.fa-database { + --fa: "\f1c0"; +} -.fa-cat { - --fa: "\f6be"; } +.fa-file-pdf { + --fa: "\f1c1"; +} -.fa-anchor-circle-exclamation { - --fa: "\e4ab"; } +.fa-file-word { + --fa: "\f1c2"; +} -.fa-truck-field { - --fa: "\e58d"; } +.fa-file-excel { + --fa: "\f1c3"; +} -.fa-route { - --fa: "\f4d7"; } +.fa-file-powerpoint { + --fa: "\f1c4"; +} -.fa-clipboard-question { - --fa: "\e4e3"; } +.fa-file-image { + --fa: "\f1c5"; +} -.fa-panorama { - --fa: "\e209"; } +.fa-file-zipper { + --fa: "\f1c6"; +} -.fa-comment-medical { - --fa: "\f7f5"; } +.fa-file-archive { + --fa: "\f1c6"; +} -.fa-teeth-open { - --fa: "\f62f"; } +.fa-file-audio { + --fa: "\f1c7"; +} -.fa-file-circle-minus { - --fa: "\e4ed"; } +.fa-file-video { + --fa: "\f1c8"; +} -.fa-tags { - --fa: "\f02c"; } +.fa-file-code { + --fa: "\f1c9"; +} -.fa-wine-glass { - --fa: "\f4e3"; } +.fa-life-ring { + --fa: "\f1cd"; +} -.fa-forward-fast { - --fa: "\f050"; } +.fa-circle-notch { + --fa: "\f1ce"; +} -.fa-fast-forward { - --fa: "\f050"; } +.fa-paper-plane { + --fa: "\f1d8"; +} -.fa-face-meh-blank { - --fa: "\f5a4"; } +.fa-clock-rotate-left { + --fa: "\f1da"; +} -.fa-meh-blank { - --fa: "\f5a4"; } +.fa-history { + --fa: "\f1da"; +} -.fa-square-parking { - --fa: "\f540"; } +.fa-heading { + --fa: "\f1dc"; +} -.fa-parking { - --fa: "\f540"; } +.fa-header { + --fa: "\f1dc"; +} -.fa-house-signal { - --fa: "\e012"; } +.fa-paragraph { + --fa: "\f1dd"; +} -.fa-bars-progress { - --fa: "\f828"; } +.fa-sliders { + --fa: "\f1de"; +} -.fa-tasks-alt { - --fa: "\f828"; } +.fa-sliders-h { + --fa: "\f1de"; +} -.fa-faucet-drip { - --fa: "\e006"; } +.fa-share-nodes { + --fa: "\f1e0"; +} -.fa-cart-flatbed { - --fa: "\f474"; } +.fa-share-alt { + --fa: "\f1e0"; +} -.fa-dolly-flatbed { - --fa: "\f474"; } +.fa-square-share-nodes { + --fa: "\f1e1"; +} -.fa-ban-smoking { - --fa: "\f54d"; } +.fa-share-alt-square { + --fa: "\f1e1"; +} -.fa-smoking-ban { - --fa: "\f54d"; } +.fa-bomb { + --fa: "\f1e2"; +} -.fa-terminal { - --fa: "\f120"; } +.fa-futbol { + --fa: "\f1e3"; +} -.fa-mobile-button { - --fa: "\f10b"; } +.fa-futbol-ball { + --fa: "\f1e3"; +} -.fa-house-medical-flag { - --fa: "\e514"; } +.fa-soccer-ball { + --fa: "\f1e3"; +} -.fa-basket-shopping { - --fa: "\f291"; } +.fa-tty { + --fa: "\f1e4"; +} -.fa-shopping-basket { - --fa: "\f291"; } +.fa-teletype { + --fa: "\f1e4"; +} -.fa-tape { - --fa: "\f4db"; } +.fa-binoculars { + --fa: "\f1e5"; +} -.fa-bus-simple { - --fa: "\f55e"; } +.fa-plug { + --fa: "\f1e6"; +} -.fa-bus-alt { - --fa: "\f55e"; } +.fa-newspaper { + --fa: "\f1ea"; +} -.fa-eye { - --fa: "\f06e"; } +.fa-wifi { + --fa: "\f1eb"; +} -.fa-face-sad-cry { - --fa: "\f5b3"; } +.fa-wifi-3 { + --fa: "\f1eb"; +} -.fa-sad-cry { - --fa: "\f5b3"; } +.fa-wifi-strong { + --fa: "\f1eb"; +} -.fa-audio-description { - --fa: "\f29e"; } +.fa-calculator { + --fa: "\f1ec"; +} -.fa-person-military-to-person { - --fa: "\e54c"; } +.fa-bell-slash { + --fa: "\f1f6"; +} -.fa-file-shield { - --fa: "\e4f0"; } +.fa-trash { + --fa: "\f1f8"; +} -.fa-user-slash { - --fa: "\f506"; } +.fa-copyright { + --fa: "\f1f9"; +} -.fa-pen { - --fa: "\f304"; } +.fa-eye-dropper { + --fa: "\f1fb"; +} -.fa-tower-observation { - --fa: "\e586"; } +.fa-eye-dropper-empty { + --fa: "\f1fb"; +} -.fa-file-code { - --fa: "\f1c9"; } +.fa-eyedropper { + --fa: "\f1fb"; +} -.fa-signal { - --fa: "\f012"; } +.fa-paintbrush { + --fa: "\f1fc"; +} -.fa-signal-5 { - --fa: "\f012"; } +.fa-paint-brush { + --fa: "\f1fc"; +} -.fa-signal-perfect { - --fa: "\f012"; } +.fa-cake-candles { + --fa: "\f1fd"; +} -.fa-bus { - --fa: "\f207"; } +.fa-birthday-cake { + --fa: "\f1fd"; +} -.fa-heart-circle-xmark { - --fa: "\e501"; } +.fa-cake { + --fa: "\f1fd"; +} -.fa-house-chimney { - --fa: "\e3af"; } +.fa-chart-area { + --fa: "\f1fe"; +} -.fa-home-lg { - --fa: "\e3af"; } +.fa-area-chart { + --fa: "\f1fe"; +} -.fa-window-maximize { - --fa: "\f2d0"; } +.fa-chart-pie { + --fa: "\f200"; +} -.fa-face-frown { - --fa: "\f119"; } +.fa-pie-chart { + --fa: "\f200"; +} -.fa-frown { - --fa: "\f119"; } +.fa-chart-line { + --fa: "\f201"; +} -.fa-prescription { - --fa: "\f5b1"; } +.fa-line-chart { + --fa: "\f201"; +} -.fa-shop { - --fa: "\f54f"; } +.fa-toggle-off { + --fa: "\f204"; +} -.fa-store-alt { - --fa: "\f54f"; } +.fa-toggle-on { + --fa: "\f205"; +} -.fa-floppy-disk { - --fa: "\f0c7"; } +.fa-bicycle { + --fa: "\f206"; +} -.fa-save { - --fa: "\f0c7"; } +.fa-bus { + --fa: "\f207"; +} -.fa-vihara { - --fa: "\f6a7"; } +.fa-closed-captioning { + --fa: "\f20a"; +} -.fa-scale-unbalanced { - --fa: "\f515"; } +.fa-shekel-sign { + --fa: "\f20b"; +} -.fa-balance-scale-left { - --fa: "\f515"; } +.fa-ils { + --fa: "\f20b"; +} -.fa-sort-up { - --fa: "\f0de"; } +.fa-shekel { + --fa: "\f20b"; +} -.fa-sort-asc { - --fa: "\f0de"; } +.fa-sheqel { + --fa: "\f20b"; +} -.fa-comment-dots { - --fa: "\f4ad"; } +.fa-sheqel-sign { + --fa: "\f20b"; +} -.fa-commenting { - --fa: "\f4ad"; } +.fa-cart-plus { + --fa: "\f217"; +} -.fa-plant-wilt { - --fa: "\e5aa"; } +.fa-cart-arrow-down { + --fa: "\f218"; +} .fa-diamond { - --fa: "\f219"; } + --fa: "\f219"; +} -.fa-face-grin-squint { - --fa: "\f585"; } +.fa-ship { + --fa: "\f21a"; +} -.fa-grin-squint { - --fa: "\f585"; } +.fa-user-secret { + --fa: "\f21b"; +} -.fa-hand-holding-dollar { - --fa: "\f4c0"; } +.fa-motorcycle { + --fa: "\f21c"; +} -.fa-hand-holding-usd { - --fa: "\f4c0"; } +.fa-street-view { + --fa: "\f21d"; +} -.fa-chart-diagram { - --fa: "\e695"; } +.fa-heart-pulse { + --fa: "\f21e"; +} -.fa-bacterium { - --fa: "\e05a"; } +.fa-heartbeat { + --fa: "\f21e"; +} -.fa-hand-pointer { - --fa: "\f25a"; } +.fa-venus { + --fa: "\f221"; +} -.fa-drum-steelpan { - --fa: "\f56a"; } +.fa-mars { + --fa: "\f222"; +} -.fa-hand-scissors { - --fa: "\f257"; } +.fa-mercury { + --fa: "\f223"; +} -.fa-hands-praying { - --fa: "\f684"; } +.fa-mars-and-venus { + --fa: "\f224"; +} -.fa-praying-hands { - --fa: "\f684"; } +.fa-transgender { + --fa: "\f225"; +} -.fa-arrow-rotate-right { - --fa: "\f01e"; } +.fa-transgender-alt { + --fa: "\f225"; +} -.fa-arrow-right-rotate { - --fa: "\f01e"; } +.fa-venus-double { + --fa: "\f226"; +} -.fa-arrow-rotate-forward { - --fa: "\f01e"; } +.fa-mars-double { + --fa: "\f227"; +} -.fa-redo { - --fa: "\f01e"; } +.fa-venus-mars { + --fa: "\f228"; +} -.fa-biohazard { - --fa: "\f780"; } +.fa-mars-stroke { + --fa: "\f229"; +} -.fa-location-crosshairs { - --fa: "\f601"; } +.fa-mars-stroke-up { + --fa: "\f22a"; +} -.fa-location { - --fa: "\f601"; } +.fa-mars-stroke-v { + --fa: "\f22a"; +} -.fa-mars-double { - --fa: "\f227"; } +.fa-mars-stroke-right { + --fa: "\f22b"; +} -.fa-child-dress { - --fa: "\e59c"; } +.fa-mars-stroke-h { + --fa: "\f22b"; +} -.fa-users-between-lines { - --fa: "\e591"; } +.fa-neuter { + --fa: "\f22c"; +} -.fa-lungs-virus { - --fa: "\e067"; } +.fa-genderless { + --fa: "\f22d"; +} -.fa-face-grin-tears { - --fa: "\f588"; } +.fa-server { + --fa: "\f233"; +} -.fa-grin-tears { - --fa: "\f588"; } +.fa-user-plus { + --fa: "\f234"; +} -.fa-phone { - --fa: "\f095"; } +.fa-user-xmark { + --fa: "\f235"; +} -.fa-calendar-xmark { - --fa: "\f273"; } +.fa-user-times { + --fa: "\f235"; +} -.fa-calendar-times { - --fa: "\f273"; } +.fa-bed { + --fa: "\f236"; +} -.fa-child-reaching { - --fa: "\e59d"; } +.fa-train { + --fa: "\f238"; +} -.fa-head-side-virus { - --fa: "\e064"; } +.fa-train-subway { + --fa: "\f239"; +} -.fa-user-gear { - --fa: "\f4fe"; } +.fa-subway { + --fa: "\f239"; +} -.fa-user-cog { - --fa: "\f4fe"; } +.fa-battery-full { + --fa: "\f240"; +} -.fa-arrow-up-1-9 { - --fa: "\f163"; } +.fa-battery { + --fa: "\f240"; +} -.fa-sort-numeric-up { - --fa: "\f163"; } +.fa-battery-5 { + --fa: "\f240"; +} -.fa-door-closed { - --fa: "\f52a"; } +.fa-battery-three-quarters { + --fa: "\f241"; +} -.fa-shield-virus { - --fa: "\e06c"; } +.fa-battery-4 { + --fa: "\f241"; +} -.fa-dice-six { - --fa: "\f526"; } +.fa-battery-half { + --fa: "\f242"; +} -.fa-mosquito-net { - --fa: "\e52c"; } +.fa-battery-3 { + --fa: "\f242"; +} -.fa-file-fragment { - --fa: "\e697"; } +.fa-battery-quarter { + --fa: "\f243"; +} -.fa-bridge-water { - --fa: "\e4ce"; } +.fa-battery-2 { + --fa: "\f243"; +} -.fa-person-booth { - --fa: "\f756"; } +.fa-battery-empty { + --fa: "\f244"; +} -.fa-text-width { - --fa: "\f035"; } +.fa-battery-0 { + --fa: "\f244"; +} -.fa-hat-wizard { - --fa: "\f6e8"; } +.fa-arrow-pointer { + --fa: "\f245"; +} -.fa-pen-fancy { - --fa: "\f5ac"; } +.fa-mouse-pointer { + --fa: "\f245"; +} -.fa-person-digging { - --fa: "\f85e"; } +.fa-i-cursor { + --fa: "\f246"; +} -.fa-digging { - --fa: "\f85e"; } +.fa-object-group { + --fa: "\f247"; +} -.fa-trash { - --fa: "\f1f8"; } +.fa-object-ungroup { + --fa: "\f248"; +} -.fa-gauge-simple { - --fa: "\f629"; } +.fa-note-sticky { + --fa: "\f249"; +} -.fa-gauge-simple-med { - --fa: "\f629"; } +.fa-sticky-note { + --fa: "\f249"; +} -.fa-tachometer-average { - --fa: "\f629"; } +.fa-clone { + --fa: "\f24d"; +} -.fa-book-medical { - --fa: "\f7e6"; } +.fa-scale-balanced { + --fa: "\f24e"; +} -.fa-poo { - --fa: "\f2fe"; } +.fa-balance-scale { + --fa: "\f24e"; +} -.fa-quote-right { - --fa: "\f10e"; } +.fa-hourglass-start { + --fa: "\f251"; +} -.fa-quote-right-alt { - --fa: "\f10e"; } +.fa-hourglass-1 { + --fa: "\f251"; +} -.fa-shirt { - --fa: "\f553"; } +.fa-hourglass-half { + --fa: "\f252"; +} -.fa-t-shirt { - --fa: "\f553"; } +.fa-hourglass-2 { + --fa: "\f252"; +} -.fa-tshirt { - --fa: "\f553"; } +.fa-hourglass-end { + --fa: "\f253"; +} -.fa-cubes { - --fa: "\f1b3"; } +.fa-hourglass-3 { + --fa: "\f253"; +} -.fa-divide { - --fa: "\f529"; } +.fa-hourglass { + --fa: "\f254"; +} -.fa-tenge-sign { - --fa: "\f7d7"; } +.fa-hourglass-empty { + --fa: "\f254"; +} -.fa-tenge { - --fa: "\f7d7"; } +.fa-hand-back-fist { + --fa: "\f255"; +} -.fa-headphones { - --fa: "\f025"; } +.fa-hand-rock { + --fa: "\f255"; +} -.fa-hands-holding { - --fa: "\f4c2"; } +.fa-hand { + --fa: "\f256"; +} -.fa-hands-clapping { - --fa: "\e1a8"; } +.fa-hand-paper { + --fa: "\f256"; +} -.fa-republican { - --fa: "\f75e"; } +.fa-hand-scissors { + --fa: "\f257"; +} -.fa-arrow-left { - --fa: "\f060"; } +.fa-hand-lizard { + --fa: "\f258"; +} -.fa-person-circle-xmark { - --fa: "\e543"; } +.fa-hand-spock { + --fa: "\f259"; +} -.fa-ruler { - --fa: "\f545"; } +.fa-hand-pointer { + --fa: "\f25a"; +} -.fa-align-left { - --fa: "\f036"; } +.fa-hand-peace { + --fa: "\f25b"; +} -.fa-dice-d6 { - --fa: "\f6d1"; } +.fa-trademark { + --fa: "\f25c"; +} -.fa-restroom { - --fa: "\f7bd"; } +.fa-registered { + --fa: "\f25d"; +} -.fa-j { - --fa: "\4a"; } +.fa-tv { + --fa: "\f26c"; +} -.fa-users-viewfinder { - --fa: "\e595"; } +.fa-television { + --fa: "\f26c"; +} -.fa-file-video { - --fa: "\f1c8"; } +.fa-tv-alt { + --fa: "\f26c"; +} -.fa-up-right-from-square { - --fa: "\f35d"; } +.fa-calendar-plus { + --fa: "\f271"; +} -.fa-external-link-alt { - --fa: "\f35d"; } +.fa-calendar-minus { + --fa: "\f272"; +} -.fa-table-cells { - --fa: "\f00a"; } +.fa-calendar-xmark { + --fa: "\f273"; +} -.fa-th { - --fa: "\f00a"; } +.fa-calendar-times { + --fa: "\f273"; +} -.fa-file-pdf { - --fa: "\f1c1"; } +.fa-calendar-check { + --fa: "\f274"; +} -.fa-book-bible { - --fa: "\f647"; } +.fa-industry { + --fa: "\f275"; +} -.fa-bible { - --fa: "\f647"; } +.fa-map-pin { + --fa: "\f276"; +} -.fa-o { - --fa: "\4f"; } +.fa-signs-post { + --fa: "\f277"; +} -.fa-suitcase-medical { - --fa: "\f0fa"; } +.fa-map-signs { + --fa: "\f277"; +} -.fa-medkit { - --fa: "\f0fa"; } +.fa-map { + --fa: "\f279"; +} -.fa-user-secret { - --fa: "\f21b"; } +.fa-message { + --fa: "\f27a"; +} -.fa-otter { - --fa: "\f700"; } +.fa-comment-alt { + --fa: "\f27a"; +} -.fa-person-dress { - --fa: "\f182"; } +.fa-circle-pause { + --fa: "\f28b"; +} -.fa-female { - --fa: "\f182"; } +.fa-pause-circle { + --fa: "\f28b"; +} -.fa-comment-dollar { - --fa: "\f651"; } +.fa-circle-stop { + --fa: "\f28d"; +} -.fa-business-time { - --fa: "\f64a"; } +.fa-stop-circle { + --fa: "\f28d"; +} -.fa-briefcase-clock { - --fa: "\f64a"; } +.fa-bag-shopping { + --fa: "\f290"; +} -.fa-table-cells-large { - --fa: "\f009"; } +.fa-shopping-bag { + --fa: "\f290"; +} -.fa-th-large { - --fa: "\f009"; } +.fa-basket-shopping { + --fa: "\f291"; +} -.fa-book-tanakh { - --fa: "\f827"; } +.fa-shopping-basket { + --fa: "\f291"; +} -.fa-tanakh { - --fa: "\f827"; } +.fa-universal-access { + --fa: "\f29a"; +} + +.fa-person-walking-with-cane { + --fa: "\f29d"; +} + +.fa-blind { + --fa: "\f29d"; +} + +.fa-audio-description { + --fa: "\f29e"; +} .fa-phone-volume { - --fa: "\f2a0"; } + --fa: "\f2a0"; +} .fa-volume-control-phone { - --fa: "\f2a0"; } + --fa: "\f2a0"; +} -.fa-hat-cowboy-side { - --fa: "\f8c1"; } +.fa-braille { + --fa: "\f2a1"; +} -.fa-clipboard-user { - --fa: "\f7f3"; } +.fa-ear-listen { + --fa: "\f2a2"; +} -.fa-child { - --fa: "\f1ae"; } +.fa-assistive-listening-systems { + --fa: "\f2a2"; +} -.fa-lira-sign { - --fa: "\f195"; } +.fa-hands-asl-interpreting { + --fa: "\f2a3"; +} -.fa-satellite { - --fa: "\f7bf"; } +.fa-american-sign-language-interpreting { + --fa: "\f2a3"; +} -.fa-plane-lock { - --fa: "\e558"; } +.fa-asl-interpreting { + --fa: "\f2a3"; +} -.fa-tag { - --fa: "\f02b"; } +.fa-hands-american-sign-language-interpreting { + --fa: "\f2a3"; +} -.fa-comment { - --fa: "\f075"; } +.fa-ear-deaf { + --fa: "\f2a4"; +} -.fa-cake-candles { - --fa: "\f1fd"; } +.fa-deaf { + --fa: "\f2a4"; +} -.fa-birthday-cake { - --fa: "\f1fd"; } +.fa-deafness { + --fa: "\f2a4"; +} -.fa-cake { - --fa: "\f1fd"; } +.fa-hard-of-hearing { + --fa: "\f2a4"; +} -.fa-envelope { - --fa: "\f0e0"; } +.fa-hands { + --fa: "\f2a7"; +} -.fa-angles-up { - --fa: "\f102"; } +.fa-sign-language { + --fa: "\f2a7"; +} -.fa-angle-double-up { - --fa: "\f102"; } +.fa-signing { + --fa: "\f2a7"; +} -.fa-paperclip { - --fa: "\f0c6"; } +.fa-eye-low-vision { + --fa: "\f2a8"; +} -.fa-arrow-right-to-city { - --fa: "\e4b3"; } +.fa-low-vision { + --fa: "\f2a8"; +} -.fa-ribbon { - --fa: "\f4d6"; } +.fa-font-awesome { + --fa: "\f2b4"; +} -.fa-lungs { - --fa: "\f604"; } +.fa-font-awesome-flag { + --fa: "\f2b4"; +} -.fa-arrow-up-9-1 { - --fa: "\f887"; } +.fa-font-awesome-logo-full { + --fa: "\f2b4"; +} -.fa-sort-numeric-up-alt { - --fa: "\f887"; } +.fa-handshake { + --fa: "\f2b5"; +} -.fa-litecoin-sign { - --fa: "\e1d3"; } +.fa-handshake-alt { + --fa: "\f2b5"; +} -.fa-border-none { - --fa: "\f850"; } +.fa-handshake-simple { + --fa: "\f2b5"; +} -.fa-circle-nodes { - --fa: "\e4e2"; } +.fa-envelope-open { + --fa: "\f2b6"; +} -.fa-parachute-box { - --fa: "\f4cd"; } +.fa-address-book { + --fa: "\f2b9"; +} -.fa-indent { - --fa: "\f03c"; } +.fa-contact-book { + --fa: "\f2b9"; +} -.fa-truck-field-un { - --fa: "\e58e"; } +.fa-address-card { + --fa: "\f2bb"; +} -.fa-hourglass { - --fa: "\f254"; } +.fa-contact-card { + --fa: "\f2bb"; +} -.fa-hourglass-empty { - --fa: "\f254"; } +.fa-vcard { + --fa: "\f2bb"; +} -.fa-mountain { - --fa: "\f6fc"; } +.fa-circle-user { + --fa: "\f2bd"; +} -.fa-user-doctor { - --fa: "\f0f0"; } +.fa-user-circle { + --fa: "\f2bd"; +} -.fa-user-md { - --fa: "\f0f0"; } +.fa-id-badge { + --fa: "\f2c1"; +} -.fa-circle-info { - --fa: "\f05a"; } +.fa-id-card { + --fa: "\f2c2"; +} -.fa-info-circle { - --fa: "\f05a"; } +.fa-drivers-license { + --fa: "\f2c2"; +} -.fa-cloud-meatball { - --fa: "\f73b"; } +.fa-temperature-full { + --fa: "\f2c7"; +} -.fa-camera { - --fa: "\f030"; } +.fa-temperature-4 { + --fa: "\f2c7"; +} -.fa-camera-alt { - --fa: "\f030"; } +.fa-thermometer-4 { + --fa: "\f2c7"; +} -.fa-square-virus { - --fa: "\e578"; } +.fa-thermometer-full { + --fa: "\f2c7"; +} -.fa-meteor { - --fa: "\f753"; } +.fa-temperature-three-quarters { + --fa: "\f2c8"; +} -.fa-car-on { - --fa: "\e4dd"; } +.fa-temperature-3 { + --fa: "\f2c8"; +} -.fa-sleigh { - --fa: "\f7cc"; } +.fa-thermometer-3 { + --fa: "\f2c8"; +} -.fa-arrow-down-1-9 { - --fa: "\f162"; } +.fa-thermometer-three-quarters { + --fa: "\f2c8"; +} -.fa-sort-numeric-asc { - --fa: "\f162"; } +.fa-temperature-half { + --fa: "\f2c9"; +} -.fa-sort-numeric-down { - --fa: "\f162"; } +.fa-temperature-2 { + --fa: "\f2c9"; +} -.fa-hand-holding-droplet { - --fa: "\f4c1"; } +.fa-thermometer-2 { + --fa: "\f2c9"; +} -.fa-hand-holding-water { - --fa: "\f4c1"; } +.fa-thermometer-half { + --fa: "\f2c9"; +} -.fa-water { - --fa: "\f773"; } +.fa-temperature-quarter { + --fa: "\f2ca"; +} -.fa-calendar-check { - --fa: "\f274"; } +.fa-temperature-1 { + --fa: "\f2ca"; +} -.fa-braille { - --fa: "\f2a1"; } +.fa-thermometer-1 { + --fa: "\f2ca"; +} -.fa-prescription-bottle-medical { - --fa: "\f486"; } +.fa-thermometer-quarter { + --fa: "\f2ca"; +} -.fa-prescription-bottle-alt { - --fa: "\f486"; } +.fa-temperature-empty { + --fa: "\f2cb"; +} -.fa-landmark { - --fa: "\f66f"; } +.fa-temperature-0 { + --fa: "\f2cb"; +} -.fa-truck { - --fa: "\f0d1"; } +.fa-thermometer-0 { + --fa: "\f2cb"; +} -.fa-crosshairs { - --fa: "\f05b"; } +.fa-thermometer-empty { + --fa: "\f2cb"; +} -.fa-person-cane { - --fa: "\e53c"; } +.fa-shower { + --fa: "\f2cc"; +} -.fa-tent { - --fa: "\e57d"; } +.fa-bath { + --fa: "\f2cd"; +} -.fa-vest-patches { - --fa: "\e086"; } +.fa-bathtub { + --fa: "\f2cd"; +} -.fa-check-double { - --fa: "\f560"; } +.fa-podcast { + --fa: "\f2ce"; +} -.fa-arrow-down-a-z { - --fa: "\f15d"; } +.fa-window-maximize { + --fa: "\f2d0"; +} -.fa-sort-alpha-asc { - --fa: "\f15d"; } +.fa-window-minimize { + --fa: "\f2d1"; +} -.fa-sort-alpha-down { - --fa: "\f15d"; } +.fa-window-restore { + --fa: "\f2d2"; +} -.fa-money-bill-wheat { - --fa: "\e52a"; } +.fa-square-xmark { + --fa: "\f2d3"; +} -.fa-cookie { - --fa: "\f563"; } +.fa-times-square { + --fa: "\f2d3"; +} -.fa-arrow-rotate-left { - --fa: "\f0e2"; } +.fa-xmark-square { + --fa: "\f2d3"; +} -.fa-arrow-left-rotate { - --fa: "\f0e2"; } +.fa-microchip { + --fa: "\f2db"; +} -.fa-arrow-rotate-back { - --fa: "\f0e2"; } +.fa-snowflake { + --fa: "\f2dc"; +} -.fa-arrow-rotate-backward { - --fa: "\f0e2"; } +.fa-spoon { + --fa: "\f2e5"; +} -.fa-undo { - --fa: "\f0e2"; } +.fa-utensil-spoon { + --fa: "\f2e5"; +} -.fa-hard-drive { - --fa: "\f0a0"; } +.fa-utensils { + --fa: "\f2e7"; +} -.fa-hdd { - --fa: "\f0a0"; } +.fa-cutlery { + --fa: "\f2e7"; +} -.fa-face-grin-squint-tears { - --fa: "\f586"; } +.fa-rotate-left { + --fa: "\f2ea"; +} -.fa-grin-squint-tears { - --fa: "\f586"; } +.fa-rotate-back { + --fa: "\f2ea"; +} -.fa-dumbbell { - --fa: "\f44b"; } +.fa-rotate-backward { + --fa: "\f2ea"; +} -.fa-rectangle-list { - --fa: "\f022"; } +.fa-undo-alt { + --fa: "\f2ea"; +} -.fa-list-alt { - --fa: "\f022"; } +.fa-trash-can { + --fa: "\f2ed"; +} -.fa-tarp-droplet { - --fa: "\e57c"; } +.fa-trash-alt { + --fa: "\f2ed"; +} -.fa-house-medical-circle-check { - --fa: "\e511"; } +.fa-rotate { + --fa: "\f2f1"; +} -.fa-person-skiing-nordic { - --fa: "\f7ca"; } +.fa-sync-alt { + --fa: "\f2f1"; +} -.fa-skiing-nordic { - --fa: "\f7ca"; } +.fa-stopwatch { + --fa: "\f2f2"; +} -.fa-calendar-plus { - --fa: "\f271"; } +.fa-right-from-bracket { + --fa: "\f2f5"; +} -.fa-plane-arrival { - --fa: "\f5af"; } +.fa-sign-out-alt { + --fa: "\f2f5"; +} -.fa-circle-left { - --fa: "\f359"; } +.fa-right-to-bracket { + --fa: "\f2f6"; +} -.fa-arrow-alt-circle-left { - --fa: "\f359"; } +.fa-sign-in-alt { + --fa: "\f2f6"; +} -.fa-train-subway { - --fa: "\f239"; } +.fa-rotate-right { + --fa: "\f2f9"; +} -.fa-subway { - --fa: "\f239"; } +.fa-redo-alt { + --fa: "\f2f9"; +} -.fa-chart-gantt { - --fa: "\e0e4"; } +.fa-rotate-forward { + --fa: "\f2f9"; +} -.fa-indian-rupee-sign { - --fa: "\e1bc"; } +.fa-poo { + --fa: "\f2fe"; +} -.fa-indian-rupee { - --fa: "\e1bc"; } +.fa-images { + --fa: "\f302"; +} -.fa-inr { - --fa: "\e1bc"; } +.fa-pencil { + --fa: "\f303"; +} -.fa-crop-simple { - --fa: "\f565"; } +.fa-pencil-alt { + --fa: "\f303"; +} -.fa-crop-alt { - --fa: "\f565"; } +.fa-pen { + --fa: "\f304"; +} -.fa-money-bill-1 { - --fa: "\f3d1"; } +.fa-pen-clip { + --fa: "\f305"; +} -.fa-money-bill-alt { - --fa: "\f3d1"; } +.fa-pen-alt { + --fa: "\f305"; +} -.fa-left-long { - --fa: "\f30a"; } +.fa-octagon { + --fa: "\f306"; +} -.fa-long-arrow-alt-left { - --fa: "\f30a"; } +.fa-down-long { + --fa: "\f309"; +} -.fa-dna { - --fa: "\f471"; } +.fa-long-arrow-alt-down { + --fa: "\f309"; +} -.fa-virus-slash { - --fa: "\e075"; } +.fa-left-long { + --fa: "\f30a"; +} -.fa-minus { - --fa: "\f068"; } +.fa-long-arrow-alt-left { + --fa: "\f30a"; +} -.fa-subtract { - --fa: "\f068"; } +.fa-right-long { + --fa: "\f30b"; +} -.fa-chess { - --fa: "\f439"; } +.fa-long-arrow-alt-right { + --fa: "\f30b"; +} -.fa-arrow-left-long { - --fa: "\f177"; } +.fa-up-long { + --fa: "\f30c"; +} -.fa-long-arrow-left { - --fa: "\f177"; } +.fa-long-arrow-alt-up { + --fa: "\f30c"; +} -.fa-plug-circle-check { - --fa: "\e55c"; } +.fa-hexagon { + --fa: "\f312"; +} -.fa-street-view { - --fa: "\f21d"; } +.fa-file-pen { + --fa: "\f31c"; +} -.fa-franc-sign { - --fa: "\e18f"; } +.fa-file-edit { + --fa: "\f31c"; +} -.fa-volume-off { - --fa: "\f026"; } +.fa-maximize { + --fa: "\f31e"; +} -.fa-hands-asl-interpreting { - --fa: "\f2a3"; } +.fa-expand-arrows-alt { + --fa: "\f31e"; +} -.fa-american-sign-language-interpreting { - --fa: "\f2a3"; } +.fa-clipboard { + --fa: "\f328"; +} -.fa-asl-interpreting { - --fa: "\f2a3"; } +.fa-left-right { + --fa: "\f337"; +} -.fa-hands-american-sign-language-interpreting { - --fa: "\f2a3"; } +.fa-arrows-alt-h { + --fa: "\f337"; +} -.fa-gear { - --fa: "\f013"; } +.fa-up-down { + --fa: "\f338"; +} -.fa-cog { - --fa: "\f013"; } +.fa-arrows-alt-v { + --fa: "\f338"; +} -.fa-droplet-slash { - --fa: "\f5c7"; } +.fa-alarm-clock { + --fa: "\f34e"; +} -.fa-tint-slash { - --fa: "\f5c7"; } +.fa-circle-down { + --fa: "\f358"; +} -.fa-mosque { - --fa: "\f678"; } +.fa-arrow-alt-circle-down { + --fa: "\f358"; +} -.fa-mosquito { - --fa: "\e52b"; } +.fa-circle-left { + --fa: "\f359"; +} -.fa-star-of-david { - --fa: "\f69a"; } +.fa-arrow-alt-circle-left { + --fa: "\f359"; +} -.fa-person-military-rifle { - --fa: "\e54b"; } +.fa-circle-right { + --fa: "\f35a"; +} -.fa-cart-shopping { - --fa: "\f07a"; } +.fa-arrow-alt-circle-right { + --fa: "\f35a"; +} -.fa-shopping-cart { - --fa: "\f07a"; } +.fa-circle-up { + --fa: "\f35b"; +} -.fa-vials { - --fa: "\f493"; } +.fa-arrow-alt-circle-up { + --fa: "\f35b"; +} -.fa-plug-circle-plus { - --fa: "\e55f"; } +.fa-up-right-from-square { + --fa: "\f35d"; +} -.fa-place-of-worship { - --fa: "\f67f"; } +.fa-external-link-alt { + --fa: "\f35d"; +} -.fa-grip-vertical { - --fa: "\f58e"; } +.fa-square-up-right { + --fa: "\f360"; +} -.fa-hexagon-nodes { - --fa: "\e699"; } +.fa-external-link-square-alt { + --fa: "\f360"; +} -.fa-arrow-turn-up { - --fa: "\f148"; } +.fa-right-left { + --fa: "\f362"; +} -.fa-level-up { - --fa: "\f148"; } +.fa-exchange-alt { + --fa: "\f362"; +} -.fa-u { - --fa: "\55"; } +.fa-repeat { + --fa: "\f363"; +} -.fa-square-root-variable { - --fa: "\f698"; } +.fa-code-commit { + --fa: "\f386"; +} -.fa-square-root-alt { - --fa: "\f698"; } +.fa-code-merge { + --fa: "\f387"; +} -.fa-clock { - --fa: "\f017"; } +.fa-desktop { + --fa: "\f390"; +} -.fa-clock-four { - --fa: "\f017"; } +.fa-desktop-alt { + --fa: "\f390"; +} -.fa-backward-step { - --fa: "\f048"; } +.fa-gem { + --fa: "\f3a5"; +} -.fa-step-backward { - --fa: "\f048"; } +.fa-turn-down { + --fa: "\f3be"; +} -.fa-pallet { - --fa: "\f482"; } +.fa-level-down-alt { + --fa: "\f3be"; +} -.fa-faucet { - --fa: "\e005"; } +.fa-turn-up { + --fa: "\f3bf"; +} -.fa-baseball-bat-ball { - --fa: "\f432"; } +.fa-level-up-alt { + --fa: "\f3bf"; +} -.fa-s { - --fa: "\53"; } +.fa-lock-open { + --fa: "\f3c1"; +} -.fa-timeline { - --fa: "\e29c"; } +.fa-location-dot { + --fa: "\f3c5"; +} -.fa-keyboard { - --fa: "\f11c"; } +.fa-map-marker-alt { + --fa: "\f3c5"; +} -.fa-caret-down { - --fa: "\f0d7"; } +.fa-microphone-lines { + --fa: "\f3c9"; +} -.fa-house-chimney-medical { - --fa: "\f7f2"; } +.fa-microphone-alt { + --fa: "\f3c9"; +} -.fa-clinic-medical { - --fa: "\f7f2"; } +.fa-mobile-screen-button { + --fa: "\f3cd"; +} -.fa-temperature-three-quarters { - --fa: "\f2c8"; } +.fa-mobile-alt { + --fa: "\f3cd"; +} -.fa-temperature-3 { - --fa: "\f2c8"; } +.fa-mobile { + --fa: "\f3ce"; +} -.fa-thermometer-3 { - --fa: "\f2c8"; } +.fa-mobile-android { + --fa: "\f3ce"; +} -.fa-thermometer-three-quarters { - --fa: "\f2c8"; } +.fa-mobile-phone { + --fa: "\f3ce"; +} .fa-mobile-screen { - --fa: "\f3cf"; } + --fa: "\f3cf"; +} .fa-mobile-android-alt { - --fa: "\f3cf"; } + --fa: "\f3cf"; +} -.fa-plane-up { - --fa: "\e22d"; } +.fa-money-bill-1 { + --fa: "\f3d1"; +} -.fa-piggy-bank { - --fa: "\f4d3"; } +.fa-money-bill-alt { + --fa: "\f3d1"; +} -.fa-battery-half { - --fa: "\f242"; } +.fa-phone-slash { + --fa: "\f3dd"; +} -.fa-battery-3 { - --fa: "\f242"; } +.fa-image-portrait { + --fa: "\f3e0"; +} -.fa-mountain-city { - --fa: "\e52e"; } +.fa-portrait { + --fa: "\f3e0"; +} -.fa-coins { - --fa: "\f51e"; } +.fa-reply { + --fa: "\f3e5"; +} -.fa-khanda { - --fa: "\f66d"; } +.fa-mail-reply { + --fa: "\f3e5"; +} -.fa-sliders { - --fa: "\f1de"; } +.fa-shield-halved { + --fa: "\f3ed"; +} -.fa-sliders-h { - --fa: "\f1de"; } +.fa-shield-alt { + --fa: "\f3ed"; +} -.fa-folder-tree { - --fa: "\f802"; } +.fa-tablet-screen-button { + --fa: "\f3fa"; +} -.fa-network-wired { - --fa: "\f6ff"; } +.fa-tablet-alt { + --fa: "\f3fa"; +} -.fa-map-pin { - --fa: "\f276"; } +.fa-tablet { + --fa: "\f3fb"; +} -.fa-hamsa { - --fa: "\f665"; } +.fa-tablet-android { + --fa: "\f3fb"; +} -.fa-cent-sign { - --fa: "\e3f5"; } +.fa-ticket-simple { + --fa: "\f3ff"; +} -.fa-flask { - --fa: "\f0c3"; } +.fa-ticket-alt { + --fa: "\f3ff"; +} -.fa-person-pregnant { - --fa: "\e31e"; } +.fa-rectangle-xmark { + --fa: "\f410"; +} -.fa-wand-sparkles { - --fa: "\f72b"; } +.fa-rectangle-times { + --fa: "\f410"; +} -.fa-ellipsis-vertical { - --fa: "\f142"; } +.fa-times-rectangle { + --fa: "\f410"; +} -.fa-ellipsis-v { - --fa: "\f142"; } +.fa-window-close { + --fa: "\f410"; +} -.fa-ticket { - --fa: "\f145"; } +.fa-down-left-and-up-right-to-center { + --fa: "\f422"; +} -.fa-power-off { - --fa: "\f011"; } +.fa-compress-alt { + --fa: "\f422"; +} -.fa-right-long { - --fa: "\f30b"; } +.fa-up-right-and-down-left-from-center { + --fa: "\f424"; +} -.fa-long-arrow-alt-right { - --fa: "\f30b"; } +.fa-expand-alt { + --fa: "\f424"; +} -.fa-flag-usa { - --fa: "\f74d"; } +.fa-baseball-bat-ball { + --fa: "\f432"; +} -.fa-laptop-file { - --fa: "\e51d"; } +.fa-baseball { + --fa: "\f433"; +} -.fa-tty { - --fa: "\f1e4"; } +.fa-baseball-ball { + --fa: "\f433"; +} -.fa-teletype { - --fa: "\f1e4"; } +.fa-basketball { + --fa: "\f434"; +} -.fa-diagram-next { - --fa: "\e476"; } +.fa-basketball-ball { + --fa: "\f434"; +} -.fa-person-rifle { - --fa: "\e54e"; } +.fa-bowling-ball { + --fa: "\f436"; +} -.fa-house-medical-circle-exclamation { - --fa: "\e512"; } +.fa-chess { + --fa: "\f439"; +} -.fa-closed-captioning { - --fa: "\f20a"; } +.fa-chess-bishop { + --fa: "\f43a"; +} -.fa-person-hiking { - --fa: "\f6ec"; } +.fa-chess-board { + --fa: "\f43c"; +} -.fa-hiking { - --fa: "\f6ec"; } +.fa-chess-king { + --fa: "\f43f"; +} -.fa-venus-double { - --fa: "\f226"; } +.fa-chess-knight { + --fa: "\f441"; +} -.fa-images { - --fa: "\f302"; } +.fa-chess-pawn { + --fa: "\f443"; +} -.fa-calculator { - --fa: "\f1ec"; } +.fa-chess-queen { + --fa: "\f445"; +} -.fa-people-pulling { - --fa: "\e535"; } +.fa-chess-rook { + --fa: "\f447"; +} -.fa-n { - --fa: "\4e"; } +.fa-dumbbell { + --fa: "\f44b"; +} -.fa-cable-car { - --fa: "\f7da"; } +.fa-football { + --fa: "\f44e"; +} -.fa-tram { - --fa: "\f7da"; } +.fa-football-ball { + --fa: "\f44e"; +} -.fa-cloud-rain { - --fa: "\f73d"; } - -.fa-building-circle-xmark { - --fa: "\e4d4"; } +.fa-golf-ball-tee { + --fa: "\f450"; +} -.fa-ship { - --fa: "\f21a"; } +.fa-golf-ball { + --fa: "\f450"; +} -.fa-arrows-down-to-line { - --fa: "\e4b8"; } +.fa-hockey-puck { + --fa: "\f453"; +} -.fa-download { - --fa: "\f019"; } +.fa-broom-ball { + --fa: "\f458"; +} -.fa-face-grin { - --fa: "\f580"; } +.fa-quidditch { + --fa: "\f458"; +} -.fa-grin { - --fa: "\f580"; } +.fa-quidditch-broom-ball { + --fa: "\f458"; +} -.fa-delete-left { - --fa: "\f55a"; } +.fa-square-full { + --fa: "\f45c"; +} -.fa-backspace { - --fa: "\f55a"; } +.fa-table-tennis-paddle-ball { + --fa: "\f45d"; +} -.fa-eye-dropper { - --fa: "\f1fb"; } +.fa-ping-pong-paddle-ball { + --fa: "\f45d"; +} -.fa-eye-dropper-empty { - --fa: "\f1fb"; } +.fa-table-tennis { + --fa: "\f45d"; +} -.fa-eyedropper { - --fa: "\f1fb"; } +.fa-volleyball { + --fa: "\f45f"; +} -.fa-file-circle-check { - --fa: "\e5a0"; } +.fa-volleyball-ball { + --fa: "\f45f"; +} -.fa-forward { - --fa: "\f04e"; } +.fa-hand-dots { + --fa: "\f461"; +} -.fa-mobile { - --fa: "\f3ce"; } +.fa-allergies { + --fa: "\f461"; +} -.fa-mobile-android { - --fa: "\f3ce"; } +.fa-bandage { + --fa: "\f462"; +} -.fa-mobile-phone { - --fa: "\f3ce"; } +.fa-band-aid { + --fa: "\f462"; +} -.fa-face-meh { - --fa: "\f11a"; } +.fa-box { + --fa: "\f466"; +} -.fa-meh { - --fa: "\f11a"; } +.fa-boxes-stacked { + --fa: "\f468"; +} -.fa-align-center { - --fa: "\f037"; } +.fa-boxes { + --fa: "\f468"; +} -.fa-book-skull { - --fa: "\f6b7"; } +.fa-boxes-alt { + --fa: "\f468"; +} -.fa-book-dead { - --fa: "\f6b7"; } +.fa-briefcase-medical { + --fa: "\f469"; +} -.fa-id-card { - --fa: "\f2c2"; } +.fa-fire-flame-simple { + --fa: "\f46a"; +} -.fa-drivers-license { - --fa: "\f2c2"; } +.fa-burn { + --fa: "\f46a"; +} -.fa-outdent { - --fa: "\f03b"; } +.fa-capsules { + --fa: "\f46b"; +} -.fa-dedent { - --fa: "\f03b"; } +.fa-clipboard-check { + --fa: "\f46c"; +} -.fa-heart-circle-exclamation { - --fa: "\e4fe"; } +.fa-clipboard-list { + --fa: "\f46d"; +} -.fa-house { - --fa: "\f015"; } +.fa-person-dots-from-line { + --fa: "\f470"; +} -.fa-home { - --fa: "\f015"; } +.fa-diagnoses { + --fa: "\f470"; +} -.fa-home-alt { - --fa: "\f015"; } +.fa-dna { + --fa: "\f471"; +} -.fa-home-lg-alt { - --fa: "\f015"; } +.fa-dolly { + --fa: "\f472"; +} -.fa-calendar-week { - --fa: "\f784"; } +.fa-dolly-box { + --fa: "\f472"; +} -.fa-laptop-medical { - --fa: "\f812"; } +.fa-cart-flatbed { + --fa: "\f474"; +} -.fa-b { - --fa: "\42"; } +.fa-dolly-flatbed { + --fa: "\f474"; +} .fa-file-medical { - --fa: "\f477"; } + --fa: "\f477"; +} -.fa-dice-one { - --fa: "\f525"; } +.fa-file-waveform { + --fa: "\f478"; +} -.fa-kiwi-bird { - --fa: "\f535"; } +.fa-file-medical-alt { + --fa: "\f478"; +} -.fa-arrow-right-arrow-left { - --fa: "\f0ec"; } +.fa-kit-medical { + --fa: "\f479"; +} -.fa-exchange { - --fa: "\f0ec"; } +.fa-first-aid { + --fa: "\f479"; +} -.fa-rotate-right { - --fa: "\f2f9"; } +.fa-circle-h { + --fa: "\f47e"; +} -.fa-redo-alt { - --fa: "\f2f9"; } +.fa-hospital-symbol { + --fa: "\f47e"; +} -.fa-rotate-forward { - --fa: "\f2f9"; } +.fa-id-card-clip { + --fa: "\f47f"; +} -.fa-utensils { - --fa: "\f2e7"; } +.fa-id-card-alt { + --fa: "\f47f"; +} -.fa-cutlery { - --fa: "\f2e7"; } +.fa-notes-medical { + --fa: "\f481"; +} -.fa-arrow-up-wide-short { - --fa: "\f161"; } +.fa-pallet { + --fa: "\f482"; +} -.fa-sort-amount-up { - --fa: "\f161"; } +.fa-pills { + --fa: "\f484"; +} -.fa-mill-sign { - --fa: "\e1ed"; } +.fa-prescription-bottle { + --fa: "\f485"; +} -.fa-bowl-rice { - --fa: "\e2eb"; } +.fa-prescription-bottle-medical { + --fa: "\f486"; +} -.fa-skull { - --fa: "\f54c"; } +.fa-prescription-bottle-alt { + --fa: "\f486"; +} -.fa-tower-broadcast { - --fa: "\f519"; } +.fa-bed-pulse { + --fa: "\f487"; +} -.fa-broadcast-tower { - --fa: "\f519"; } +.fa-procedures { + --fa: "\f487"; +} -.fa-truck-pickup { - --fa: "\f63c"; } +.fa-truck-fast { + --fa: "\f48b"; +} -.fa-up-long { - --fa: "\f30c"; } +.fa-shipping-fast { + --fa: "\f48b"; +} -.fa-long-arrow-alt-up { - --fa: "\f30c"; } +.fa-smoking { + --fa: "\f48d"; +} -.fa-stop { - --fa: "\f04d"; } +.fa-syringe { + --fa: "\f48e"; +} -.fa-code-merge { - --fa: "\f387"; } +.fa-tablets { + --fa: "\f490"; +} -.fa-upload { - --fa: "\f093"; } +.fa-thermometer { + --fa: "\f491"; +} -.fa-hurricane { - --fa: "\f751"; } +.fa-vial { + --fa: "\f492"; +} -.fa-mound { - --fa: "\e52d"; } +.fa-vials { + --fa: "\f493"; +} -.fa-toilet-portable { - --fa: "\e583"; } +.fa-warehouse { + --fa: "\f494"; +} -.fa-compact-disc { - --fa: "\f51f"; } +.fa-weight-scale { + --fa: "\f496"; +} -.fa-file-arrow-down { - --fa: "\f56d"; } +.fa-weight { + --fa: "\f496"; +} -.fa-file-download { - --fa: "\f56d"; } +.fa-x-ray { + --fa: "\f497"; +} -.fa-caravan { - --fa: "\f8ff"; } +.fa-box-open { + --fa: "\f49e"; +} -.fa-shield-cat { - --fa: "\e572"; } +.fa-comment-dots { + --fa: "\f4ad"; +} -.fa-bolt { - --fa: "\f0e7"; } +.fa-commenting { + --fa: "\f4ad"; +} -.fa-zap { - --fa: "\f0e7"; } +.fa-comment-slash { + --fa: "\f4b3"; +} -.fa-glass-water { - --fa: "\e4f4"; } +.fa-couch { + --fa: "\f4b8"; +} -.fa-oil-well { - --fa: "\e532"; } +.fa-circle-dollar-to-slot { + --fa: "\f4b9"; +} -.fa-vault { - --fa: "\e2c5"; } +.fa-donate { + --fa: "\f4b9"; +} -.fa-mars { - --fa: "\f222"; } +.fa-dove { + --fa: "\f4ba"; +} -.fa-toilet { - --fa: "\f7d8"; } +.fa-hand-holding { + --fa: "\f4bd"; +} -.fa-plane-circle-xmark { - --fa: "\e557"; } +.fa-hand-holding-heart { + --fa: "\f4be"; +} -.fa-yen-sign { - --fa: "\f157"; } +.fa-hand-holding-dollar { + --fa: "\f4c0"; +} -.fa-cny { - --fa: "\f157"; } +.fa-hand-holding-usd { + --fa: "\f4c0"; +} -.fa-jpy { - --fa: "\f157"; } +.fa-hand-holding-droplet { + --fa: "\f4c1"; +} -.fa-rmb { - --fa: "\f157"; } +.fa-hand-holding-water { + --fa: "\f4c1"; +} -.fa-yen { - --fa: "\f157"; } +.fa-hands-holding { + --fa: "\f4c2"; +} -.fa-ruble-sign { - --fa: "\f158"; } +.fa-handshake-angle { + --fa: "\f4c4"; +} -.fa-rouble { - --fa: "\f158"; } +.fa-hands-helping { + --fa: "\f4c4"; +} -.fa-rub { - --fa: "\f158"; } +.fa-parachute-box { + --fa: "\f4cd"; +} -.fa-ruble { - --fa: "\f158"; } +.fa-people-carry-box { + --fa: "\f4ce"; +} -.fa-sun { - --fa: "\f185"; } +.fa-people-carry { + --fa: "\f4ce"; +} -.fa-guitar { - --fa: "\f7a6"; } +.fa-piggy-bank { + --fa: "\f4d3"; +} -.fa-face-laugh-wink { - --fa: "\f59c"; } +.fa-ribbon { + --fa: "\f4d6"; +} -.fa-laugh-wink { - --fa: "\f59c"; } +.fa-route { + --fa: "\f4d7"; +} -.fa-horse-head { - --fa: "\f7ab"; } +.fa-seedling { + --fa: "\f4d8"; +} -.fa-bore-hole { - --fa: "\e4c3"; } +.fa-sprout { + --fa: "\f4d8"; +} -.fa-industry { - --fa: "\f275"; } +.fa-sign-hanging { + --fa: "\f4d9"; +} -.fa-circle-down { - --fa: "\f358"; } +.fa-sign { + --fa: "\f4d9"; +} -.fa-arrow-alt-circle-down { - --fa: "\f358"; } +.fa-face-smile-wink { + --fa: "\f4da"; +} -.fa-arrows-turn-to-dots { - --fa: "\e4c1"; } +.fa-smile-wink { + --fa: "\f4da"; +} -.fa-florin-sign { - --fa: "\e184"; } +.fa-tape { + --fa: "\f4db"; +} -.fa-arrow-down-short-wide { - --fa: "\f884"; } +.fa-truck-ramp-box { + --fa: "\f4de"; +} -.fa-sort-amount-desc { - --fa: "\f884"; } +.fa-truck-loading { + --fa: "\f4de"; +} -.fa-sort-amount-down-alt { - --fa: "\f884"; } +.fa-truck-moving { + --fa: "\f4df"; +} -.fa-less-than { - --fa: "\3c"; } +.fa-video-slash { + --fa: "\f4e2"; +} -.fa-angle-down { - --fa: "\f107"; } +.fa-wine-glass { + --fa: "\f4e3"; +} -.fa-car-tunnel { - --fa: "\e4de"; } +.fa-user-astronaut { + --fa: "\f4fb"; +} -.fa-head-side-cough { - --fa: "\e061"; } +.fa-user-check { + --fa: "\f4fc"; +} -.fa-grip-lines { - --fa: "\f7a4"; } +.fa-user-clock { + --fa: "\f4fd"; +} -.fa-thumbs-down { - --fa: "\f165"; } +.fa-user-gear { + --fa: "\f4fe"; +} -.fa-user-lock { - --fa: "\f502"; } +.fa-user-cog { + --fa: "\f4fe"; +} -.fa-arrow-right-long { - --fa: "\f178"; } +.fa-user-pen { + --fa: "\f4ff"; +} -.fa-long-arrow-right { - --fa: "\f178"; } +.fa-user-edit { + --fa: "\f4ff"; +} -.fa-anchor-circle-xmark { - --fa: "\e4ac"; } +.fa-user-group { + --fa: "\f500"; +} -.fa-ellipsis { - --fa: "\f141"; } +.fa-user-friends { + --fa: "\f500"; +} -.fa-ellipsis-h { - --fa: "\f141"; } +.fa-user-graduate { + --fa: "\f501"; +} -.fa-chess-pawn { - --fa: "\f443"; } +.fa-user-lock { + --fa: "\f502"; +} -.fa-kit-medical { - --fa: "\f479"; } +.fa-user-minus { + --fa: "\f503"; +} -.fa-first-aid { - --fa: "\f479"; } +.fa-user-ninja { + --fa: "\f504"; +} -.fa-person-through-window { - --fa: "\e5a9"; } +.fa-user-shield { + --fa: "\f505"; +} -.fa-toolbox { - --fa: "\f552"; } +.fa-user-slash { + --fa: "\f506"; +} -.fa-hands-holding-circle { - --fa: "\e4fb"; } +.fa-user-alt-slash { + --fa: "\f506"; +} -.fa-bug { - --fa: "\f188"; } +.fa-user-large-slash { + --fa: "\f506"; +} -.fa-credit-card { - --fa: "\f09d"; } +.fa-user-tag { + --fa: "\f507"; +} -.fa-credit-card-alt { - --fa: "\f09d"; } +.fa-user-tie { + --fa: "\f508"; +} -.fa-car { - --fa: "\f1b9"; } +.fa-users-gear { + --fa: "\f509"; +} -.fa-automobile { - --fa: "\f1b9"; } +.fa-users-cog { + --fa: "\f509"; +} -.fa-hand-holding-hand { - --fa: "\e4f7"; } +.fa-scale-unbalanced { + --fa: "\f515"; +} -.fa-book-open-reader { - --fa: "\f5da"; } +.fa-balance-scale-left { + --fa: "\f515"; +} -.fa-book-reader { - --fa: "\f5da"; } +.fa-scale-unbalanced-flip { + --fa: "\f516"; +} -.fa-mountain-sun { - --fa: "\e52f"; } +.fa-balance-scale-right { + --fa: "\f516"; +} -.fa-arrows-left-right-to-line { - --fa: "\e4ba"; } +.fa-blender { + --fa: "\f517"; +} -.fa-dice-d20 { - --fa: "\f6cf"; } +.fa-book-open { + --fa: "\f518"; +} -.fa-truck-droplet { - --fa: "\e58c"; } +.fa-tower-broadcast { + --fa: "\f519"; +} -.fa-file-circle-xmark { - --fa: "\e5a1"; } +.fa-broadcast-tower { + --fa: "\f519"; +} -.fa-temperature-arrow-up { - --fa: "\e040"; } +.fa-broom { + --fa: "\f51a"; +} -.fa-temperature-up { - --fa: "\e040"; } +.fa-chalkboard { + --fa: "\f51b"; +} -.fa-medal { - --fa: "\f5a2"; } +.fa-blackboard { + --fa: "\f51b"; +} -.fa-bed { - --fa: "\f236"; } +.fa-chalkboard-user { + --fa: "\f51c"; +} -.fa-square-h { - --fa: "\f0fd"; } +.fa-chalkboard-teacher { + --fa: "\f51c"; +} -.fa-h-square { - --fa: "\f0fd"; } +.fa-church { + --fa: "\f51d"; +} -.fa-podcast { - --fa: "\f2ce"; } +.fa-coins { + --fa: "\f51e"; +} -.fa-temperature-full { - --fa: "\f2c7"; } +.fa-compact-disc { + --fa: "\f51f"; +} -.fa-temperature-4 { - --fa: "\f2c7"; } +.fa-crow { + --fa: "\f520"; +} -.fa-thermometer-4 { - --fa: "\f2c7"; } +.fa-crown { + --fa: "\f521"; +} -.fa-thermometer-full { - --fa: "\f2c7"; } +.fa-dice { + --fa: "\f522"; +} -.fa-bell { - --fa: "\f0f3"; } +.fa-dice-five { + --fa: "\f523"; +} -.fa-superscript { - --fa: "\f12b"; } +.fa-dice-four { + --fa: "\f524"; +} -.fa-plug-circle-xmark { - --fa: "\e560"; } +.fa-dice-one { + --fa: "\f525"; +} -.fa-star-of-life { - --fa: "\f621"; } +.fa-dice-six { + --fa: "\f526"; +} -.fa-phone-slash { - --fa: "\f3dd"; } +.fa-dice-three { + --fa: "\f527"; +} -.fa-paint-roller { - --fa: "\f5aa"; } +.fa-dice-two { + --fa: "\f528"; +} -.fa-handshake-angle { - --fa: "\f4c4"; } +.fa-divide { + --fa: "\f529"; +} -.fa-hands-helping { - --fa: "\f4c4"; } +.fa-door-closed { + --fa: "\f52a"; +} -.fa-location-dot { - --fa: "\f3c5"; } +.fa-door-open { + --fa: "\f52b"; +} -.fa-map-marker-alt { - --fa: "\f3c5"; } +.fa-feather { + --fa: "\f52d"; +} -.fa-file { - --fa: "\f15b"; } +.fa-frog { + --fa: "\f52e"; +} -.fa-greater-than { - --fa: "\3e"; } +.fa-gas-pump { + --fa: "\f52f"; +} -.fa-person-swimming { - --fa: "\f5c4"; } +.fa-glasses { + --fa: "\f530"; +} -.fa-swimmer { - --fa: "\f5c4"; } +.fa-greater-than-equal { + --fa: "\f532"; +} -.fa-arrow-down { - --fa: "\f063"; } +.fa-helicopter { + --fa: "\f533"; +} -.fa-droplet { - --fa: "\f043"; } +.fa-infinity { + --fa: "\f534"; +} -.fa-tint { - --fa: "\f043"; } +.fa-kiwi-bird { + --fa: "\f535"; +} -.fa-eraser { - --fa: "\f12d"; } +.fa-less-than-equal { + --fa: "\f537"; +} -.fa-earth-americas { - --fa: "\f57d"; } +.fa-memory { + --fa: "\f538"; +} -.fa-earth { - --fa: "\f57d"; } +.fa-microphone-lines-slash { + --fa: "\f539"; +} -.fa-earth-america { - --fa: "\f57d"; } +.fa-microphone-alt-slash { + --fa: "\f539"; +} -.fa-globe-americas { - --fa: "\f57d"; } +.fa-money-bill-wave { + --fa: "\f53a"; +} -.fa-person-burst { - --fa: "\e53b"; } +.fa-money-bill-1-wave { + --fa: "\f53b"; +} -.fa-dove { - --fa: "\f4ba"; } +.fa-money-bill-wave-alt { + --fa: "\f53b"; +} -.fa-battery-empty { - --fa: "\f244"; } +.fa-money-check { + --fa: "\f53c"; +} -.fa-battery-0 { - --fa: "\f244"; } +.fa-money-check-dollar { + --fa: "\f53d"; +} -.fa-socks { - --fa: "\f696"; } +.fa-money-check-alt { + --fa: "\f53d"; +} -.fa-inbox { - --fa: "\f01c"; } +.fa-not-equal { + --fa: "\f53e"; +} -.fa-section { - --fa: "\e447"; } +.fa-palette { + --fa: "\f53f"; +} -.fa-gauge-high { - --fa: "\f625"; } +.fa-square-parking { + --fa: "\f540"; +} -.fa-tachometer-alt { - --fa: "\f625"; } +.fa-parking { + --fa: "\f540"; +} -.fa-tachometer-alt-fast { - --fa: "\f625"; } +.fa-diagram-project { + --fa: "\f542"; +} -.fa-envelope-open-text { - --fa: "\f658"; } +.fa-project-diagram { + --fa: "\f542"; +} -.fa-hospital { - --fa: "\f0f8"; } +.fa-receipt { + --fa: "\f543"; +} -.fa-hospital-alt { - --fa: "\f0f8"; } +.fa-robot { + --fa: "\f544"; +} -.fa-hospital-wide { - --fa: "\f0f8"; } +.fa-ruler { + --fa: "\f545"; +} -.fa-wine-bottle { - --fa: "\f72f"; } +.fa-ruler-combined { + --fa: "\f546"; +} -.fa-chess-rook { - --fa: "\f447"; } +.fa-ruler-horizontal { + --fa: "\f547"; +} -.fa-bars-staggered { - --fa: "\f550"; } +.fa-ruler-vertical { + --fa: "\f548"; +} -.fa-reorder { - --fa: "\f550"; } +.fa-school { + --fa: "\f549"; +} -.fa-stream { - --fa: "\f550"; } +.fa-screwdriver { + --fa: "\f54a"; +} -.fa-dharmachakra { - --fa: "\f655"; } +.fa-shoe-prints { + --fa: "\f54b"; +} -.fa-hotdog { - --fa: "\f80f"; } +.fa-skull { + --fa: "\f54c"; +} -.fa-person-walking-with-cane { - --fa: "\f29d"; } +.fa-ban-smoking { + --fa: "\f54d"; +} -.fa-blind { - --fa: "\f29d"; } +.fa-smoking-ban { + --fa: "\f54d"; +} -.fa-drum { - --fa: "\f569"; } +.fa-store { + --fa: "\f54e"; +} -.fa-ice-cream { - --fa: "\f810"; } +.fa-shop { + --fa: "\f54f"; +} -.fa-heart-circle-bolt { - --fa: "\e4fc"; } +.fa-store-alt { + --fa: "\f54f"; +} -.fa-fax { - --fa: "\f1ac"; } +.fa-bars-staggered { + --fa: "\f550"; +} -.fa-paragraph { - --fa: "\f1dd"; } +.fa-reorder { + --fa: "\f550"; +} -.fa-check-to-slot { - --fa: "\f772"; } +.fa-stream { + --fa: "\f550"; +} -.fa-vote-yea { - --fa: "\f772"; } +.fa-stroopwafel { + --fa: "\f551"; +} -.fa-star-half { - --fa: "\f089"; } +.fa-toolbox { + --fa: "\f552"; +} -.fa-boxes-stacked { - --fa: "\f468"; } +.fa-shirt { + --fa: "\f553"; +} -.fa-boxes { - --fa: "\f468"; } +.fa-t-shirt { + --fa: "\f553"; +} -.fa-boxes-alt { - --fa: "\f468"; } +.fa-tshirt { + --fa: "\f553"; +} -.fa-link { - --fa: "\f0c1"; } +.fa-person-walking { + --fa: "\f554"; +} -.fa-chain { - --fa: "\f0c1"; } +.fa-walking { + --fa: "\f554"; +} -.fa-ear-listen { - --fa: "\f2a2"; } +.fa-wallet { + --fa: "\f555"; +} -.fa-assistive-listening-systems { - --fa: "\f2a2"; } +.fa-face-angry { + --fa: "\f556"; +} -.fa-tree-city { - --fa: "\e587"; } +.fa-angry { + --fa: "\f556"; +} -.fa-play { - --fa: "\f04b"; } +.fa-archway { + --fa: "\f557"; +} -.fa-font { - --fa: "\f031"; } +.fa-book-atlas { + --fa: "\f558"; +} -.fa-table-cells-row-lock { - --fa: "\e67a"; } +.fa-atlas { + --fa: "\f558"; +} -.fa-rupiah-sign { - --fa: "\e23d"; } +.fa-award { + --fa: "\f559"; +} -.fa-magnifying-glass { - --fa: "\f002"; } +.fa-delete-left { + --fa: "\f55a"; +} -.fa-search { - --fa: "\f002"; } +.fa-backspace { + --fa: "\f55a"; +} -.fa-table-tennis-paddle-ball { - --fa: "\f45d"; } +.fa-bezier-curve { + --fa: "\f55b"; +} -.fa-ping-pong-paddle-ball { - --fa: "\f45d"; } +.fa-bong { + --fa: "\f55c"; +} -.fa-table-tennis { - --fa: "\f45d"; } +.fa-brush { + --fa: "\f55d"; +} -.fa-person-dots-from-line { - --fa: "\f470"; } +.fa-bus-simple { + --fa: "\f55e"; +} -.fa-diagnoses { - --fa: "\f470"; } +.fa-bus-alt { + --fa: "\f55e"; +} -.fa-trash-can-arrow-up { - --fa: "\f82a"; } +.fa-cannabis { + --fa: "\f55f"; +} -.fa-trash-restore-alt { - --fa: "\f82a"; } +.fa-check-double { + --fa: "\f560"; +} -.fa-naira-sign { - --fa: "\e1f6"; } +.fa-martini-glass-citrus { + --fa: "\f561"; +} -.fa-cart-arrow-down { - --fa: "\f218"; } +.fa-cocktail { + --fa: "\f561"; +} -.fa-walkie-talkie { - --fa: "\f8ef"; } +.fa-bell-concierge { + --fa: "\f562"; +} -.fa-file-pen { - --fa: "\f31c"; } +.fa-concierge-bell { + --fa: "\f562"; +} -.fa-file-edit { - --fa: "\f31c"; } +.fa-cookie { + --fa: "\f563"; +} -.fa-receipt { - --fa: "\f543"; } +.fa-cookie-bite { + --fa: "\f564"; +} -.fa-square-pen { - --fa: "\f14b"; } +.fa-crop-simple { + --fa: "\f565"; +} -.fa-pen-square { - --fa: "\f14b"; } +.fa-crop-alt { + --fa: "\f565"; +} -.fa-pencil-square { - --fa: "\f14b"; } +.fa-tachograph-digital { + --fa: "\f566"; +} -.fa-suitcase-rolling { - --fa: "\f5c1"; } +.fa-digital-tachograph { + --fa: "\f566"; +} -.fa-person-circle-exclamation { - --fa: "\e53f"; } +.fa-face-dizzy { + --fa: "\f567"; +} -.fa-chevron-down { - --fa: "\f078"; } +.fa-dizzy { + --fa: "\f567"; +} -.fa-battery-full { - --fa: "\f240"; } +.fa-compass-drafting { + --fa: "\f568"; +} -.fa-battery { - --fa: "\f240"; } +.fa-drafting-compass { + --fa: "\f568"; +} -.fa-battery-5 { - --fa: "\f240"; } +.fa-drum { + --fa: "\f569"; +} -.fa-skull-crossbones { - --fa: "\f714"; } +.fa-drum-steelpan { + --fa: "\f56a"; +} -.fa-code-compare { - --fa: "\e13a"; } +.fa-feather-pointed { + --fa: "\f56b"; +} -.fa-list-ul { - --fa: "\f0ca"; } +.fa-feather-alt { + --fa: "\f56b"; +} -.fa-list-dots { - --fa: "\f0ca"; } +.fa-file-contract { + --fa: "\f56c"; +} -.fa-school-lock { - --fa: "\e56f"; } +.fa-file-arrow-down { + --fa: "\f56d"; +} -.fa-tower-cell { - --fa: "\e585"; } +.fa-file-download { + --fa: "\f56d"; +} -.fa-down-long { - --fa: "\f309"; } +.fa-file-export { + --fa: "\f56e"; +} -.fa-long-arrow-alt-down { - --fa: "\f309"; } +.fa-arrow-right-from-file { + --fa: "\f56e"; +} -.fa-ranking-star { - --fa: "\e561"; } +.fa-file-import { + --fa: "\f56f"; +} -.fa-chess-king { - --fa: "\f43f"; } +.fa-arrow-right-to-file { + --fa: "\f56f"; +} -.fa-person-harassing { - --fa: "\e549"; } +.fa-file-invoice { + --fa: "\f570"; +} -.fa-brazilian-real-sign { - --fa: "\e46c"; } +.fa-file-invoice-dollar { + --fa: "\f571"; +} -.fa-landmark-dome { - --fa: "\f752"; } +.fa-file-prescription { + --fa: "\f572"; +} -.fa-landmark-alt { - --fa: "\f752"; } +.fa-file-signature { + --fa: "\f573"; +} -.fa-arrow-up { - --fa: "\f062"; } +.fa-file-arrow-up { + --fa: "\f574"; +} -.fa-tv { - --fa: "\f26c"; } +.fa-file-upload { + --fa: "\f574"; +} -.fa-television { - --fa: "\f26c"; } +.fa-fill { + --fa: "\f575"; +} -.fa-tv-alt { - --fa: "\f26c"; } +.fa-fill-drip { + --fa: "\f576"; +} -.fa-shrimp { - --fa: "\e448"; } +.fa-fingerprint { + --fa: "\f577"; +} -.fa-list-check { - --fa: "\f0ae"; } +.fa-fish { + --fa: "\f578"; +} -.fa-tasks { - --fa: "\f0ae"; } +.fa-face-flushed { + --fa: "\f579"; +} -.fa-jug-detergent { - --fa: "\e519"; } +.fa-flushed { + --fa: "\f579"; +} -.fa-circle-user { - --fa: "\f2bd"; } +.fa-face-frown-open { + --fa: "\f57a"; +} -.fa-user-circle { - --fa: "\f2bd"; } +.fa-frown-open { + --fa: "\f57a"; +} -.fa-user-shield { - --fa: "\f505"; } +.fa-martini-glass { + --fa: "\f57b"; +} -.fa-wind { - --fa: "\f72e"; } +.fa-glass-martini-alt { + --fa: "\f57b"; +} -.fa-car-burst { - --fa: "\f5e1"; } +.fa-earth-africa { + --fa: "\f57c"; +} -.fa-car-crash { - --fa: "\f5e1"; } +.fa-globe-africa { + --fa: "\f57c"; +} -.fa-y { - --fa: "\59"; } +.fa-earth-americas { + --fa: "\f57d"; +} -.fa-person-snowboarding { - --fa: "\f7ce"; } +.fa-earth { + --fa: "\f57d"; +} -.fa-snowboarding { - --fa: "\f7ce"; } +.fa-earth-america { + --fa: "\f57d"; +} -.fa-truck-fast { - --fa: "\f48b"; } +.fa-globe-americas { + --fa: "\f57d"; +} -.fa-shipping-fast { - --fa: "\f48b"; } +.fa-earth-asia { + --fa: "\f57e"; +} -.fa-fish { - --fa: "\f578"; } +.fa-globe-asia { + --fa: "\f57e"; +} -.fa-user-graduate { - --fa: "\f501"; } +.fa-face-grimace { + --fa: "\f57f"; +} -.fa-circle-half-stroke { - --fa: "\f042"; } +.fa-grimace { + --fa: "\f57f"; +} -.fa-adjust { - --fa: "\f042"; } +.fa-face-grin { + --fa: "\f580"; +} -.fa-clapperboard { - --fa: "\e131"; } +.fa-grin { + --fa: "\f580"; +} -.fa-circle-radiation { - --fa: "\f7ba"; } +.fa-face-grin-wide { + --fa: "\f581"; +} -.fa-radiation-alt { - --fa: "\f7ba"; } +.fa-grin-alt { + --fa: "\f581"; +} -.fa-baseball { - --fa: "\f433"; } +.fa-face-grin-beam { + --fa: "\f582"; +} -.fa-baseball-ball { - --fa: "\f433"; } +.fa-grin-beam { + --fa: "\f582"; +} -.fa-jet-fighter-up { - --fa: "\e518"; } +.fa-face-grin-beam-sweat { + --fa: "\f583"; +} -.fa-diagram-project { - --fa: "\f542"; } +.fa-grin-beam-sweat { + --fa: "\f583"; +} -.fa-project-diagram { - --fa: "\f542"; } +.fa-face-grin-hearts { + --fa: "\f584"; +} -.fa-copy { - --fa: "\f0c5"; } +.fa-grin-hearts { + --fa: "\f584"; +} -.fa-volume-xmark { - --fa: "\f6a9"; } +.fa-face-grin-squint { + --fa: "\f585"; +} -.fa-volume-mute { - --fa: "\f6a9"; } +.fa-grin-squint { + --fa: "\f585"; +} -.fa-volume-times { - --fa: "\f6a9"; } +.fa-face-grin-squint-tears { + --fa: "\f586"; +} -.fa-hand-sparkles { - --fa: "\e05d"; } +.fa-grin-squint-tears { + --fa: "\f586"; +} -.fa-grip { - --fa: "\f58d"; } +.fa-face-grin-stars { + --fa: "\f587"; +} -.fa-grip-horizontal { - --fa: "\f58d"; } +.fa-grin-stars { + --fa: "\f587"; +} -.fa-share-from-square { - --fa: "\f14d"; } +.fa-face-grin-tears { + --fa: "\f588"; +} -.fa-share-square { - --fa: "\f14d"; } +.fa-grin-tears { + --fa: "\f588"; +} -.fa-child-combatant { - --fa: "\e4e0"; } +.fa-face-grin-tongue { + --fa: "\f589"; +} -.fa-child-rifle { - --fa: "\e4e0"; } +.fa-grin-tongue { + --fa: "\f589"; +} -.fa-gun { - --fa: "\e19b"; } +.fa-face-grin-tongue-squint { + --fa: "\f58a"; +} -.fa-square-phone { - --fa: "\f098"; } +.fa-grin-tongue-squint { + --fa: "\f58a"; +} -.fa-phone-square { - --fa: "\f098"; } +.fa-face-grin-tongue-wink { + --fa: "\f58b"; +} -.fa-plus { - --fa: "\2b"; } +.fa-grin-tongue-wink { + --fa: "\f58b"; +} -.fa-add { - --fa: "\2b"; } +.fa-face-grin-wink { + --fa: "\f58c"; +} -.fa-expand { - --fa: "\f065"; } +.fa-grin-wink { + --fa: "\f58c"; +} -.fa-computer { - --fa: "\e4e5"; } +.fa-grip { + --fa: "\f58d"; +} -.fa-xmark { - --fa: "\f00d"; } +.fa-grid-horizontal { + --fa: "\f58d"; +} -.fa-close { - --fa: "\f00d"; } +.fa-grip-horizontal { + --fa: "\f58d"; +} -.fa-multiply { - --fa: "\f00d"; } +.fa-grip-vertical { + --fa: "\f58e"; +} -.fa-remove { - --fa: "\f00d"; } +.fa-grid-vertical { + --fa: "\f58e"; +} -.fa-times { - --fa: "\f00d"; } +.fa-headset { + --fa: "\f590"; +} -.fa-arrows-up-down-left-right { - --fa: "\f047"; } +.fa-highlighter { + --fa: "\f591"; +} -.fa-arrows { - --fa: "\f047"; } +.fa-hot-tub-person { + --fa: "\f593"; +} -.fa-chalkboard-user { - --fa: "\f51c"; } +.fa-hot-tub { + --fa: "\f593"; +} -.fa-chalkboard-teacher { - --fa: "\f51c"; } +.fa-hotel { + --fa: "\f594"; +} -.fa-peso-sign { - --fa: "\e222"; } +.fa-joint { + --fa: "\f595"; +} -.fa-building-shield { - --fa: "\e4d8"; } +.fa-face-kiss { + --fa: "\f596"; +} -.fa-baby { - --fa: "\f77c"; } +.fa-kiss { + --fa: "\f596"; +} -.fa-users-line { - --fa: "\e592"; } +.fa-face-kiss-beam { + --fa: "\f597"; +} -.fa-quote-left { - --fa: "\f10d"; } +.fa-kiss-beam { + --fa: "\f597"; +} -.fa-quote-left-alt { - --fa: "\f10d"; } +.fa-face-kiss-wink-heart { + --fa: "\f598"; +} -.fa-tractor { - --fa: "\f722"; } +.fa-kiss-wink-heart { + --fa: "\f598"; +} -.fa-trash-arrow-up { - --fa: "\f829"; } +.fa-face-laugh { + --fa: "\f599"; +} -.fa-trash-restore { - --fa: "\f829"; } +.fa-laugh { + --fa: "\f599"; +} -.fa-arrow-down-up-lock { - --fa: "\e4b0"; } +.fa-face-laugh-beam { + --fa: "\f59a"; +} -.fa-lines-leaning { - --fa: "\e51e"; } +.fa-laugh-beam { + --fa: "\f59a"; +} -.fa-ruler-combined { - --fa: "\f546"; } +.fa-face-laugh-squint { + --fa: "\f59b"; +} -.fa-copyright { - --fa: "\f1f9"; } +.fa-laugh-squint { + --fa: "\f59b"; +} -.fa-equals { - --fa: "\3d"; } +.fa-face-laugh-wink { + --fa: "\f59c"; +} -.fa-blender { - --fa: "\f517"; } +.fa-laugh-wink { + --fa: "\f59c"; +} -.fa-teeth { - --fa: "\f62e"; } +.fa-cart-flatbed-suitcase { + --fa: "\f59d"; +} -.fa-shekel-sign { - --fa: "\f20b"; } +.fa-luggage-cart { + --fa: "\f59d"; +} -.fa-ils { - --fa: "\f20b"; } +.fa-map-location { + --fa: "\f59f"; +} -.fa-shekel { - --fa: "\f20b"; } +.fa-map-marked { + --fa: "\f59f"; +} -.fa-sheqel { - --fa: "\f20b"; } +.fa-map-location-dot { + --fa: "\f5a0"; +} -.fa-sheqel-sign { - --fa: "\f20b"; } +.fa-map-marked-alt { + --fa: "\f5a0"; +} -.fa-map { - --fa: "\f279"; } +.fa-marker { + --fa: "\f5a1"; +} -.fa-rocket { - --fa: "\f135"; } +.fa-medal { + --fa: "\f5a2"; +} -.fa-photo-film { - --fa: "\f87c"; } +.fa-face-meh-blank { + --fa: "\f5a4"; +} -.fa-photo-video { - --fa: "\f87c"; } +.fa-meh-blank { + --fa: "\f5a4"; +} -.fa-folder-minus { - --fa: "\f65d"; } +.fa-face-rolling-eyes { + --fa: "\f5a5"; +} -.fa-hexagon-nodes-bolt { - --fa: "\e69a"; } +.fa-meh-rolling-eyes { + --fa: "\f5a5"; +} -.fa-store { - --fa: "\f54e"; } +.fa-monument { + --fa: "\f5a6"; +} -.fa-arrow-trend-up { - --fa: "\e098"; } +.fa-mortar-pestle { + --fa: "\f5a7"; +} -.fa-plug-circle-minus { - --fa: "\e55e"; } +.fa-paint-roller { + --fa: "\f5aa"; +} -.fa-sign-hanging { - --fa: "\f4d9"; } +.fa-passport { + --fa: "\f5ab"; +} -.fa-sign { - --fa: "\f4d9"; } +.fa-pen-fancy { + --fa: "\f5ac"; +} -.fa-bezier-curve { - --fa: "\f55b"; } +.fa-pen-nib { + --fa: "\f5ad"; +} -.fa-bell-slash { - --fa: "\f1f6"; } +.fa-pen-ruler { + --fa: "\f5ae"; +} -.fa-tablet { - --fa: "\f3fb"; } +.fa-pencil-ruler { + --fa: "\f5ae"; +} -.fa-tablet-android { - --fa: "\f3fb"; } +.fa-plane-arrival { + --fa: "\f5af"; +} -.fa-school-flag { - --fa: "\e56e"; } +.fa-plane-departure { + --fa: "\f5b0"; +} -.fa-fill { - --fa: "\f575"; } +.fa-prescription { + --fa: "\f5b1"; +} -.fa-angle-up { - --fa: "\f106"; } +.fa-face-sad-cry { + --fa: "\f5b3"; +} -.fa-drumstick-bite { - --fa: "\f6d7"; } +.fa-sad-cry { + --fa: "\f5b3"; +} -.fa-holly-berry { - --fa: "\f7aa"; } +.fa-face-sad-tear { + --fa: "\f5b4"; +} -.fa-chevron-left { - --fa: "\f053"; } +.fa-sad-tear { + --fa: "\f5b4"; +} -.fa-bacteria { - --fa: "\e059"; } +.fa-van-shuttle { + --fa: "\f5b6"; +} -.fa-hand-lizard { - --fa: "\f258"; } +.fa-shuttle-van { + --fa: "\f5b6"; +} -.fa-notdef { - --fa: "\e1fe"; } +.fa-signature { + --fa: "\f5b7"; +} -.fa-disease { - --fa: "\f7fa"; } +.fa-face-smile-beam { + --fa: "\f5b8"; +} -.fa-briefcase-medical { - --fa: "\f469"; } +.fa-smile-beam { + --fa: "\f5b8"; +} -.fa-genderless { - --fa: "\f22d"; } +.fa-solar-panel { + --fa: "\f5ba"; +} -.fa-chevron-right { - --fa: "\f054"; } +.fa-spa { + --fa: "\f5bb"; +} -.fa-retweet { - --fa: "\f079"; } +.fa-splotch { + --fa: "\f5bc"; +} -.fa-car-rear { - --fa: "\f5de"; } +.fa-spray-can { + --fa: "\f5bd"; +} -.fa-car-alt { - --fa: "\f5de"; } +.fa-stamp { + --fa: "\f5bf"; +} -.fa-pump-soap { - --fa: "\e06b"; } +.fa-star-half-stroke { + --fa: "\f5c0"; +} -.fa-video-slash { - --fa: "\f4e2"; } +.fa-star-half-alt { + --fa: "\f5c0"; +} -.fa-battery-quarter { - --fa: "\f243"; } +.fa-suitcase-rolling { + --fa: "\f5c1"; +} -.fa-battery-2 { - --fa: "\f243"; } +.fa-face-surprise { + --fa: "\f5c2"; +} -.fa-radio { - --fa: "\f8d7"; } +.fa-surprise { + --fa: "\f5c2"; +} -.fa-baby-carriage { - --fa: "\f77d"; } +.fa-swatchbook { + --fa: "\f5c3"; +} -.fa-carriage-baby { - --fa: "\f77d"; } +.fa-person-swimming { + --fa: "\f5c4"; +} -.fa-traffic-light { - --fa: "\f637"; } +.fa-swimmer { + --fa: "\f5c4"; +} -.fa-thermometer { - --fa: "\f491"; } +.fa-water-ladder { + --fa: "\f5c5"; +} -.fa-vr-cardboard { - --fa: "\f729"; } +.fa-ladder-water { + --fa: "\f5c5"; +} -.fa-hand-middle-finger { - --fa: "\f806"; } +.fa-swimming-pool { + --fa: "\f5c5"; +} -.fa-percent { - --fa: "\25"; } +.fa-droplet-slash { + --fa: "\f5c7"; +} -.fa-percentage { - --fa: "\25"; } +.fa-tint-slash { + --fa: "\f5c7"; +} -.fa-truck-moving { - --fa: "\f4df"; } +.fa-face-tired { + --fa: "\f5c8"; +} -.fa-glass-water-droplet { - --fa: "\e4f5"; } +.fa-tired { + --fa: "\f5c8"; +} -.fa-display { - --fa: "\e163"; } +.fa-tooth { + --fa: "\f5c9"; +} -.fa-face-smile { - --fa: "\f118"; } +.fa-umbrella-beach { + --fa: "\f5ca"; +} -.fa-smile { - --fa: "\f118"; } +.fa-weight-hanging { + --fa: "\f5cd"; +} -.fa-thumbtack { - --fa: "\f08d"; } +.fa-wine-glass-empty { + --fa: "\f5ce"; +} -.fa-thumb-tack { - --fa: "\f08d"; } +.fa-wine-glass-alt { + --fa: "\f5ce"; +} -.fa-trophy { - --fa: "\f091"; } +.fa-spray-can-sparkles { + --fa: "\f5d0"; +} -.fa-person-praying { - --fa: "\f683"; } +.fa-air-freshener { + --fa: "\f5d0"; +} -.fa-pray { - --fa: "\f683"; } +.fa-apple-whole { + --fa: "\f5d1"; +} -.fa-hammer { - --fa: "\f6e3"; } +.fa-apple-alt { + --fa: "\f5d1"; +} -.fa-hand-peace { - --fa: "\f25b"; } +.fa-atom { + --fa: "\f5d2"; +} -.fa-rotate { - --fa: "\f2f1"; } +.fa-bone { + --fa: "\f5d7"; +} -.fa-sync-alt { - --fa: "\f2f1"; } +.fa-book-open-reader { + --fa: "\f5da"; +} -.fa-spinner { - --fa: "\f110"; } +.fa-book-reader { + --fa: "\f5da"; +} -.fa-robot { - --fa: "\f544"; } +.fa-brain { + --fa: "\f5dc"; +} -.fa-peace { - --fa: "\f67c"; } +.fa-car-rear { + --fa: "\f5de"; +} -.fa-gears { - --fa: "\f085"; } +.fa-car-alt { + --fa: "\f5de"; +} -.fa-cogs { - --fa: "\f085"; } +.fa-car-battery { + --fa: "\f5df"; +} -.fa-warehouse { - --fa: "\f494"; } +.fa-battery-car { + --fa: "\f5df"; +} -.fa-arrow-up-right-dots { - --fa: "\e4b7"; } +.fa-car-burst { + --fa: "\f5e1"; +} -.fa-splotch { - --fa: "\f5bc"; } +.fa-car-crash { + --fa: "\f5e1"; +} -.fa-face-grin-hearts { - --fa: "\f584"; } +.fa-car-side { + --fa: "\f5e4"; +} -.fa-grin-hearts { - --fa: "\f584"; } +.fa-charging-station { + --fa: "\f5e7"; +} -.fa-dice-four { - --fa: "\f524"; } +.fa-diamond-turn-right { + --fa: "\f5eb"; +} -.fa-sim-card { - --fa: "\f7c4"; } +.fa-directions { + --fa: "\f5eb"; +} -.fa-transgender { - --fa: "\f225"; } +.fa-draw-polygon { + --fa: "\f5ee"; +} -.fa-transgender-alt { - --fa: "\f225"; } +.fa-vector-polygon { + --fa: "\f5ee"; +} -.fa-mercury { - --fa: "\f223"; } +.fa-laptop-code { + --fa: "\f5fc"; +} -.fa-arrow-turn-down { - --fa: "\f149"; } +.fa-layer-group { + --fa: "\f5fd"; +} -.fa-level-down { - --fa: "\f149"; } +.fa-location-crosshairs { + --fa: "\f601"; +} -.fa-person-falling-burst { - --fa: "\e547"; } +.fa-location { + --fa: "\f601"; +} -.fa-award { - --fa: "\f559"; } +.fa-lungs { + --fa: "\f604"; +} -.fa-ticket-simple { - --fa: "\f3ff"; } +.fa-microscope { + --fa: "\f610"; +} -.fa-ticket-alt { - --fa: "\f3ff"; } +.fa-oil-can { + --fa: "\f613"; +} -.fa-building { - --fa: "\f1ad"; } +.fa-poop { + --fa: "\f619"; +} -.fa-angles-left { - --fa: "\f100"; } +.fa-shapes { + --fa: "\f61f"; +} -.fa-angle-double-left { - --fa: "\f100"; } +.fa-triangle-circle-square { + --fa: "\f61f"; +} -.fa-qrcode { - --fa: "\f029"; } +.fa-star-of-life { + --fa: "\f621"; +} -.fa-clock-rotate-left { - --fa: "\f1da"; } +.fa-gauge { + --fa: "\f624"; +} -.fa-history { - --fa: "\f1da"; } +.fa-dashboard { + --fa: "\f624"; +} -.fa-face-grin-beam-sweat { - --fa: "\f583"; } +.fa-gauge-med { + --fa: "\f624"; +} -.fa-grin-beam-sweat { - --fa: "\f583"; } +.fa-tachometer-alt-average { + --fa: "\f624"; +} -.fa-file-export { - --fa: "\f56e"; } +.fa-gauge-high { + --fa: "\f625"; +} -.fa-arrow-right-from-file { - --fa: "\f56e"; } +.fa-tachometer-alt { + --fa: "\f625"; +} -.fa-shield { - --fa: "\f132"; } +.fa-tachometer-alt-fast { + --fa: "\f625"; +} -.fa-shield-blank { - --fa: "\f132"; } +.fa-gauge-simple { + --fa: "\f629"; +} -.fa-arrow-up-short-wide { - --fa: "\f885"; } +.fa-gauge-simple-med { + --fa: "\f629"; +} -.fa-sort-amount-up-alt { - --fa: "\f885"; } +.fa-tachometer-average { + --fa: "\f629"; +} -.fa-comment-nodes { - --fa: "\e696"; } +.fa-gauge-simple-high { + --fa: "\f62a"; +} -.fa-house-medical { - --fa: "\e3b2"; } +.fa-tachometer { + --fa: "\f62a"; +} -.fa-golf-ball-tee { - --fa: "\f450"; } +.fa-tachometer-fast { + --fa: "\f62a"; +} -.fa-golf-ball { - --fa: "\f450"; } +.fa-teeth { + --fa: "\f62e"; +} -.fa-circle-chevron-left { - --fa: "\f137"; } +.fa-teeth-open { + --fa: "\f62f"; +} -.fa-chevron-circle-left { - --fa: "\f137"; } +.fa-masks-theater { + --fa: "\f630"; +} -.fa-house-chimney-window { - --fa: "\e00d"; } +.fa-theater-masks { + --fa: "\f630"; +} -.fa-pen-nib { - --fa: "\f5ad"; } +.fa-traffic-light { + --fa: "\f637"; +} -.fa-tent-arrow-turn-left { - --fa: "\e580"; } +.fa-truck-monster { + --fa: "\f63b"; +} -.fa-tents { - --fa: "\e582"; } +.fa-truck-pickup { + --fa: "\f63c"; +} -.fa-wand-magic { - --fa: "\f0d0"; } +.fa-rectangle-ad { + --fa: "\f641"; +} -.fa-magic { - --fa: "\f0d0"; } +.fa-ad { + --fa: "\f641"; +} -.fa-dog { - --fa: "\f6d3"; } +.fa-ankh { + --fa: "\f644"; +} -.fa-carrot { - --fa: "\f787"; } +.fa-book-bible { + --fa: "\f647"; +} -.fa-moon { - --fa: "\f186"; } +.fa-bible { + --fa: "\f647"; +} -.fa-wine-glass-empty { - --fa: "\f5ce"; } +.fa-business-time { + --fa: "\f64a"; +} -.fa-wine-glass-alt { - --fa: "\f5ce"; } +.fa-briefcase-clock { + --fa: "\f64a"; +} -.fa-cheese { - --fa: "\f7ef"; } +.fa-city { + --fa: "\f64f"; +} -.fa-yin-yang { - --fa: "\f6ad"; } +.fa-comment-dollar { + --fa: "\f651"; +} -.fa-music { - --fa: "\f001"; } +.fa-comments-dollar { + --fa: "\f653"; +} -.fa-code-commit { - --fa: "\f386"; } +.fa-cross { + --fa: "\f654"; +} -.fa-temperature-low { - --fa: "\f76b"; } +.fa-dharmachakra { + --fa: "\f655"; +} -.fa-person-biking { - --fa: "\f84a"; } +.fa-envelope-open-text { + --fa: "\f658"; +} -.fa-biking { - --fa: "\f84a"; } +.fa-folder-minus { + --fa: "\f65d"; +} -.fa-broom { - --fa: "\f51a"; } +.fa-folder-plus { + --fa: "\f65e"; +} -.fa-shield-heart { - --fa: "\e574"; } +.fa-filter-circle-dollar { + --fa: "\f662"; +} + +.fa-funnel-dollar { + --fa: "\f662"; +} .fa-gopuram { - --fa: "\f664"; } + --fa: "\f664"; +} -.fa-earth-oceania { - --fa: "\e47b"; } +.fa-hamsa { + --fa: "\f665"; +} -.fa-globe-oceania { - --fa: "\e47b"; } +.fa-bahai { + --fa: "\f666"; +} -.fa-square-xmark { - --fa: "\f2d3"; } +.fa-haykal { + --fa: "\f666"; +} -.fa-times-square { - --fa: "\f2d3"; } +.fa-jedi { + --fa: "\f669"; +} -.fa-xmark-square { - --fa: "\f2d3"; } +.fa-book-journal-whills { + --fa: "\f66a"; +} -.fa-hashtag { - --fa: "\23"; } +.fa-journal-whills { + --fa: "\f66a"; +} -.fa-up-right-and-down-left-from-center { - --fa: "\f424"; } +.fa-kaaba { + --fa: "\f66b"; +} -.fa-expand-alt { - --fa: "\f424"; } +.fa-khanda { + --fa: "\f66d"; +} -.fa-oil-can { - --fa: "\f613"; } +.fa-landmark { + --fa: "\f66f"; +} -.fa-t { - --fa: "\54"; } +.fa-envelopes-bulk { + --fa: "\f674"; +} -.fa-hippo { - --fa: "\f6ed"; } +.fa-mail-bulk { + --fa: "\f674"; +} -.fa-chart-column { - --fa: "\e0e3"; } +.fa-menorah { + --fa: "\f676"; +} -.fa-infinity { - --fa: "\f534"; } +.fa-mosque { + --fa: "\f678"; +} -.fa-vial-circle-check { - --fa: "\e596"; } +.fa-om { + --fa: "\f679"; +} -.fa-person-arrow-down-to-line { - --fa: "\e538"; } +.fa-spaghetti-monster-flying { + --fa: "\f67b"; +} -.fa-voicemail { - --fa: "\f897"; } +.fa-pastafarianism { + --fa: "\f67b"; +} -.fa-fan { - --fa: "\f863"; } +.fa-peace { + --fa: "\f67c"; +} -.fa-person-walking-luggage { - --fa: "\e554"; } +.fa-place-of-worship { + --fa: "\f67f"; +} -.fa-up-down { - --fa: "\f338"; } +.fa-square-poll-vertical { + --fa: "\f681"; +} -.fa-arrows-alt-v { - --fa: "\f338"; } +.fa-poll { + --fa: "\f681"; +} -.fa-cloud-moon-rain { - --fa: "\f73c"; } +.fa-square-poll-horizontal { + --fa: "\f682"; +} -.fa-calendar { - --fa: "\f133"; } +.fa-poll-h { + --fa: "\f682"; +} -.fa-trailer { - --fa: "\e041"; } +.fa-person-praying { + --fa: "\f683"; +} -.fa-bahai { - --fa: "\f666"; } +.fa-pray { + --fa: "\f683"; +} -.fa-haykal { - --fa: "\f666"; } +.fa-hands-praying { + --fa: "\f684"; +} -.fa-sd-card { - --fa: "\f7c2"; } +.fa-praying-hands { + --fa: "\f684"; +} -.fa-dragon { - --fa: "\f6d5"; } +.fa-book-quran { + --fa: "\f687"; +} -.fa-shoe-prints { - --fa: "\f54b"; } +.fa-quran { + --fa: "\f687"; +} -.fa-circle-plus { - --fa: "\f055"; } +.fa-magnifying-glass-dollar { + --fa: "\f688"; +} -.fa-plus-circle { - --fa: "\f055"; } +.fa-search-dollar { + --fa: "\f688"; +} -.fa-face-grin-tongue-wink { - --fa: "\f58b"; } +.fa-magnifying-glass-location { + --fa: "\f689"; +} -.fa-grin-tongue-wink { - --fa: "\f58b"; } +.fa-search-location { + --fa: "\f689"; +} -.fa-hand-holding { - --fa: "\f4bd"; } +.fa-socks { + --fa: "\f696"; +} -.fa-plug-circle-exclamation { - --fa: "\e55d"; } +.fa-square-root-variable { + --fa: "\f698"; +} -.fa-link-slash { - --fa: "\f127"; } +.fa-square-root-alt { + --fa: "\f698"; +} -.fa-chain-broken { - --fa: "\f127"; } +.fa-star-and-crescent { + --fa: "\f699"; +} -.fa-chain-slash { - --fa: "\f127"; } +.fa-star-of-david { + --fa: "\f69a"; +} -.fa-unlink { - --fa: "\f127"; } +.fa-synagogue { + --fa: "\f69b"; +} -.fa-clone { - --fa: "\f24d"; } +.fa-scroll-torah { + --fa: "\f6a0"; +} -.fa-person-walking-arrow-loop-left { - --fa: "\e551"; } +.fa-torah { + --fa: "\f6a0"; +} -.fa-arrow-up-z-a { - --fa: "\f882"; } +.fa-torii-gate { + --fa: "\f6a1"; +} -.fa-sort-alpha-up-alt { - --fa: "\f882"; } +.fa-vihara { + --fa: "\f6a7"; +} -.fa-fire-flame-curved { - --fa: "\f7e4"; } +.fa-volume { + --fa: "\f6a8"; +} -.fa-fire-alt { - --fa: "\f7e4"; } +.fa-volume-medium { + --fa: "\f6a8"; +} -.fa-tornado { - --fa: "\f76f"; } +.fa-volume-xmark { + --fa: "\f6a9"; +} -.fa-file-circle-plus { - --fa: "\e494"; } +.fa-volume-mute { + --fa: "\f6a9"; +} -.fa-book-quran { - --fa: "\f687"; } +.fa-volume-times { + --fa: "\f6a9"; +} -.fa-quran { - --fa: "\f687"; } +.fa-yin-yang { + --fa: "\f6ad"; +} -.fa-anchor { - --fa: "\f13d"; } +.fa-blender-phone { + --fa: "\f6b6"; +} -.fa-border-all { - --fa: "\f84c"; } +.fa-book-skull { + --fa: "\f6b7"; +} -.fa-face-angry { - --fa: "\f556"; } +.fa-book-dead { + --fa: "\f6b7"; +} -.fa-angry { - --fa: "\f556"; } +.fa-campground { + --fa: "\f6bb"; +} -.fa-cookie-bite { - --fa: "\f564"; } +.fa-cat { + --fa: "\f6be"; +} -.fa-arrow-trend-down { - --fa: "\e097"; } +.fa-chair { + --fa: "\f6c0"; +} -.fa-rss { - --fa: "\f09e"; } +.fa-cloud-moon { + --fa: "\f6c3"; +} -.fa-feed { - --fa: "\f09e"; } +.fa-cloud-sun { + --fa: "\f6c4"; +} -.fa-draw-polygon { - --fa: "\f5ee"; } +.fa-cow { + --fa: "\f6c8"; +} -.fa-scale-balanced { - --fa: "\f24e"; } +.fa-dice-d20 { + --fa: "\f6cf"; +} -.fa-balance-scale { - --fa: "\f24e"; } +.fa-dice-d6 { + --fa: "\f6d1"; +} -.fa-gauge-simple-high { - --fa: "\f62a"; } +.fa-dog { + --fa: "\f6d3"; +} -.fa-tachometer { - --fa: "\f62a"; } +.fa-dragon { + --fa: "\f6d5"; +} -.fa-tachometer-fast { - --fa: "\f62a"; } +.fa-drumstick-bite { + --fa: "\f6d7"; +} -.fa-shower { - --fa: "\f2cc"; } +.fa-dungeon { + --fa: "\f6d9"; +} -.fa-desktop { - --fa: "\f390"; } +.fa-file-csv { + --fa: "\f6dd"; +} -.fa-desktop-alt { - --fa: "\f390"; } +.fa-hand-fist { + --fa: "\f6de"; +} -.fa-m { - --fa: "\4d"; } +.fa-fist-raised { + --fa: "\f6de"; +} -.fa-table-list { - --fa: "\f00b"; } +.fa-ghost { + --fa: "\f6e2"; +} -.fa-th-list { - --fa: "\f00b"; } +.fa-hammer { + --fa: "\f6e3"; +} -.fa-comment-sms { - --fa: "\f7cd"; } +.fa-hanukiah { + --fa: "\f6e6"; +} -.fa-sms { - --fa: "\f7cd"; } +.fa-hat-wizard { + --fa: "\f6e8"; +} -.fa-book { - --fa: "\f02d"; } +.fa-person-hiking { + --fa: "\f6ec"; +} -.fa-user-plus { - --fa: "\f234"; } +.fa-hiking { + --fa: "\f6ec"; +} -.fa-check { - --fa: "\f00c"; } +.fa-hippo { + --fa: "\f6ed"; +} -.fa-battery-three-quarters { - --fa: "\f241"; } +.fa-horse { + --fa: "\f6f0"; +} -.fa-battery-4 { - --fa: "\f241"; } +.fa-house-chimney-crack { + --fa: "\f6f1"; +} -.fa-house-circle-check { - --fa: "\e509"; } +.fa-house-damage { + --fa: "\f6f1"; +} -.fa-angle-left { - --fa: "\f104"; } +.fa-hryvnia-sign { + --fa: "\f6f2"; +} -.fa-diagram-successor { - --fa: "\e47a"; } +.fa-hryvnia { + --fa: "\f6f2"; +} -.fa-truck-arrow-right { - --fa: "\e58b"; } +.fa-mask { + --fa: "\f6fa"; +} -.fa-arrows-split-up-and-left { - --fa: "\e4bc"; } +.fa-mountain { + --fa: "\f6fc"; +} -.fa-hand-fist { - --fa: "\f6de"; } +.fa-network-wired { + --fa: "\f6ff"; +} -.fa-fist-raised { - --fa: "\f6de"; } +.fa-otter { + --fa: "\f700"; +} -.fa-cloud-moon { - --fa: "\f6c3"; } +.fa-ring { + --fa: "\f70b"; +} -.fa-briefcase { - --fa: "\f0b1"; } +.fa-person-running { + --fa: "\f70c"; +} -.fa-person-falling { - --fa: "\e546"; } +.fa-running { + --fa: "\f70c"; +} -.fa-image-portrait { - --fa: "\f3e0"; } +.fa-scroll { + --fa: "\f70e"; +} -.fa-portrait { - --fa: "\f3e0"; } +.fa-skull-crossbones { + --fa: "\f714"; +} -.fa-user-tag { - --fa: "\f507"; } +.fa-slash { + --fa: "\f715"; +} -.fa-rug { - --fa: "\e569"; } +.fa-spider { + --fa: "\f717"; +} -.fa-earth-europe { - --fa: "\f7a2"; } +.fa-toilet-paper { + --fa: "\f71e"; +} -.fa-globe-europe { - --fa: "\f7a2"; } +.fa-toilet-paper-alt { + --fa: "\f71e"; +} -.fa-cart-flatbed-suitcase { - --fa: "\f59d"; } +.fa-toilet-paper-blank { + --fa: "\f71e"; +} -.fa-luggage-cart { - --fa: "\f59d"; } +.fa-tractor { + --fa: "\f722"; +} -.fa-rectangle-xmark { - --fa: "\f410"; } +.fa-user-injured { + --fa: "\f728"; +} -.fa-rectangle-times { - --fa: "\f410"; } +.fa-vr-cardboard { + --fa: "\f729"; +} -.fa-times-rectangle { - --fa: "\f410"; } +.fa-wand-sparkles { + --fa: "\f72b"; +} -.fa-window-close { - --fa: "\f410"; } +.fa-wind { + --fa: "\f72e"; +} -.fa-baht-sign { - --fa: "\e0ac"; } +.fa-wine-bottle { + --fa: "\f72f"; +} -.fa-book-open { - --fa: "\f518"; } +.fa-cloud-meatball { + --fa: "\f73b"; +} -.fa-book-journal-whills { - --fa: "\f66a"; } +.fa-cloud-moon-rain { + --fa: "\f73c"; +} -.fa-journal-whills { - --fa: "\f66a"; } +.fa-cloud-rain { + --fa: "\f73d"; +} -.fa-handcuffs { - --fa: "\e4f8"; } +.fa-cloud-showers-heavy { + --fa: "\f740"; +} -.fa-triangle-exclamation { - --fa: "\f071"; } +.fa-cloud-sun-rain { + --fa: "\f743"; +} -.fa-exclamation-triangle { - --fa: "\f071"; } +.fa-democrat { + --fa: "\f747"; +} -.fa-warning { - --fa: "\f071"; } +.fa-flag-usa { + --fa: "\f74d"; +} -.fa-database { - --fa: "\f1c0"; } +.fa-hurricane { + --fa: "\f751"; +} -.fa-share { - --fa: "\f064"; } +.fa-landmark-dome { + --fa: "\f752"; +} -.fa-mail-forward { - --fa: "\f064"; } +.fa-landmark-alt { + --fa: "\f752"; +} -.fa-bottle-droplet { - --fa: "\e4c4"; } +.fa-meteor { + --fa: "\f753"; +} -.fa-mask-face { - --fa: "\e1d7"; } +.fa-person-booth { + --fa: "\f756"; +} -.fa-hill-rockslide { - --fa: "\e508"; } +.fa-poo-storm { + --fa: "\f75a"; +} -.fa-right-left { - --fa: "\f362"; } +.fa-poo-bolt { + --fa: "\f75a"; +} -.fa-exchange-alt { - --fa: "\f362"; } +.fa-rainbow { + --fa: "\f75b"; +} -.fa-paper-plane { - --fa: "\f1d8"; } +.fa-republican { + --fa: "\f75e"; +} -.fa-road-circle-exclamation { - --fa: "\e565"; } +.fa-smog { + --fa: "\f75f"; +} -.fa-dungeon { - --fa: "\f6d9"; } +.fa-temperature-high { + --fa: "\f769"; +} -.fa-align-right { - --fa: "\f038"; } +.fa-temperature-low { + --fa: "\f76b"; +} -.fa-money-bill-1-wave { - --fa: "\f53b"; } +.fa-cloud-bolt { + --fa: "\f76c"; +} -.fa-money-bill-wave-alt { - --fa: "\f53b"; } +.fa-thunderstorm { + --fa: "\f76c"; +} -.fa-life-ring { - --fa: "\f1cd"; } +.fa-tornado { + --fa: "\f76f"; +} -.fa-hands { - --fa: "\f2a7"; } +.fa-volcano { + --fa: "\f770"; +} -.fa-sign-language { - --fa: "\f2a7"; } +.fa-check-to-slot { + --fa: "\f772"; +} -.fa-signing { - --fa: "\f2a7"; } +.fa-vote-yea { + --fa: "\f772"; +} + +.fa-water { + --fa: "\f773"; +} + +.fa-baby { + --fa: "\f77c"; +} + +.fa-baby-carriage { + --fa: "\f77d"; +} + +.fa-carriage-baby { + --fa: "\f77d"; +} + +.fa-biohazard { + --fa: "\f780"; +} + +.fa-blog { + --fa: "\f781"; +} .fa-calendar-day { - --fa: "\f783"; } + --fa: "\f783"; +} -.fa-water-ladder { - --fa: "\f5c5"; } +.fa-calendar-week { + --fa: "\f784"; +} -.fa-ladder-water { - --fa: "\f5c5"; } +.fa-candy-cane { + --fa: "\f786"; +} -.fa-swimming-pool { - --fa: "\f5c5"; } +.fa-carrot { + --fa: "\f787"; +} -.fa-arrows-up-down { - --fa: "\f07d"; } +.fa-cash-register { + --fa: "\f788"; +} -.fa-arrows-v { - --fa: "\f07d"; } +.fa-minimize { + --fa: "\f78c"; +} -.fa-face-grimace { - --fa: "\f57f"; } +.fa-compress-arrows-alt { + --fa: "\f78c"; +} -.fa-grimace { - --fa: "\f57f"; } +.fa-dumpster { + --fa: "\f793"; +} -.fa-wheelchair-move { - --fa: "\e2ce"; } +.fa-dumpster-fire { + --fa: "\f794"; +} -.fa-wheelchair-alt { - --fa: "\e2ce"; } +.fa-ethernet { + --fa: "\f796"; +} -.fa-turn-down { - --fa: "\f3be"; } +.fa-gifts { + --fa: "\f79c"; +} -.fa-level-down-alt { - --fa: "\f3be"; } +.fa-champagne-glasses { + --fa: "\f79f"; +} -.fa-person-walking-arrow-right { - --fa: "\e552"; } +.fa-glass-cheers { + --fa: "\f79f"; +} -.fa-square-envelope { - --fa: "\f199"; } +.fa-whiskey-glass { + --fa: "\f7a0"; +} -.fa-envelope-square { - --fa: "\f199"; } +.fa-glass-whiskey { + --fa: "\f7a0"; +} -.fa-dice { - --fa: "\f522"; } +.fa-earth-europe { + --fa: "\f7a2"; +} -.fa-bowling-ball { - --fa: "\f436"; } +.fa-globe-europe { + --fa: "\f7a2"; +} -.fa-brain { - --fa: "\f5dc"; } +.fa-grip-lines { + --fa: "\f7a4"; +} -.fa-bandage { - --fa: "\f462"; } +.fa-grip-lines-vertical { + --fa: "\f7a5"; +} -.fa-band-aid { - --fa: "\f462"; } +.fa-guitar { + --fa: "\f7a6"; +} -.fa-calendar-minus { - --fa: "\f272"; } +.fa-heart-crack { + --fa: "\f7a9"; +} -.fa-circle-xmark { - --fa: "\f057"; } +.fa-heart-broken { + --fa: "\f7a9"; +} -.fa-times-circle { - --fa: "\f057"; } +.fa-holly-berry { + --fa: "\f7aa"; +} -.fa-xmark-circle { - --fa: "\f057"; } +.fa-horse-head { + --fa: "\f7ab"; +} -.fa-gifts { - --fa: "\f79c"; } +.fa-icicles { + --fa: "\f7ad"; +} -.fa-hotel { - --fa: "\f594"; } +.fa-igloo { + --fa: "\f7ae"; +} -.fa-earth-asia { - --fa: "\f57e"; } +.fa-mitten { + --fa: "\f7b5"; +} -.fa-globe-asia { - --fa: "\f57e"; } +.fa-mug-hot { + --fa: "\f7b6"; +} -.fa-id-card-clip { - --fa: "\f47f"; } +.fa-radiation { + --fa: "\f7b9"; +} -.fa-id-card-alt { - --fa: "\f47f"; } +.fa-circle-radiation { + --fa: "\f7ba"; +} -.fa-magnifying-glass-plus { - --fa: "\f00e"; } +.fa-radiation-alt { + --fa: "\f7ba"; +} -.fa-search-plus { - --fa: "\f00e"; } +.fa-restroom { + --fa: "\f7bd"; +} -.fa-thumbs-up { - --fa: "\f164"; } +.fa-satellite { + --fa: "\f7bf"; +} -.fa-user-clock { - --fa: "\f4fd"; } +.fa-satellite-dish { + --fa: "\f7c0"; +} -.fa-hand-dots { - --fa: "\f461"; } +.fa-sd-card { + --fa: "\f7c2"; +} -.fa-allergies { - --fa: "\f461"; } +.fa-sim-card { + --fa: "\f7c4"; +} -.fa-file-invoice { - --fa: "\f570"; } +.fa-person-skating { + --fa: "\f7c5"; +} -.fa-window-minimize { - --fa: "\f2d1"; } +.fa-skating { + --fa: "\f7c5"; +} -.fa-mug-saucer { - --fa: "\f0f4"; } +.fa-person-skiing { + --fa: "\f7c9"; +} -.fa-coffee { - --fa: "\f0f4"; } +.fa-skiing { + --fa: "\f7c9"; +} -.fa-brush { - --fa: "\f55d"; } +.fa-person-skiing-nordic { + --fa: "\f7ca"; +} -.fa-file-half-dashed { - --fa: "\e698"; } +.fa-skiing-nordic { + --fa: "\f7ca"; +} -.fa-mask { - --fa: "\f6fa"; } +.fa-sleigh { + --fa: "\f7cc"; +} -.fa-magnifying-glass-minus { - --fa: "\f010"; } +.fa-comment-sms { + --fa: "\f7cd"; +} -.fa-search-minus { - --fa: "\f010"; } +.fa-sms { + --fa: "\f7cd"; +} -.fa-ruler-vertical { - --fa: "\f548"; } +.fa-person-snowboarding { + --fa: "\f7ce"; +} -.fa-user-large { - --fa: "\f406"; } +.fa-snowboarding { + --fa: "\f7ce"; +} -.fa-user-alt { - --fa: "\f406"; } +.fa-snowman { + --fa: "\f7d0"; +} -.fa-train-tram { - --fa: "\e5b4"; } +.fa-snowplow { + --fa: "\f7d2"; +} + +.fa-tenge-sign { + --fa: "\f7d7"; +} + +.fa-tenge { + --fa: "\f7d7"; +} + +.fa-toilet { + --fa: "\f7d8"; +} + +.fa-screwdriver-wrench { + --fa: "\f7d9"; +} + +.fa-tools { + --fa: "\f7d9"; +} + +.fa-cable-car { + --fa: "\f7da"; +} + +.fa-tram { + --fa: "\f7da"; +} + +.fa-fire-flame-curved { + --fa: "\f7e4"; +} + +.fa-fire-alt { + --fa: "\f7e4"; +} + +.fa-bacon { + --fa: "\f7e5"; +} + +.fa-book-medical { + --fa: "\f7e6"; +} + +.fa-bread-slice { + --fa: "\f7ec"; +} + +.fa-cheese { + --fa: "\f7ef"; +} + +.fa-house-chimney-medical { + --fa: "\f7f2"; +} + +.fa-clinic-medical { + --fa: "\f7f2"; +} + +.fa-clipboard-user { + --fa: "\f7f3"; +} + +.fa-comment-medical { + --fa: "\f7f5"; +} + +.fa-crutch { + --fa: "\f7f7"; +} + +.fa-disease { + --fa: "\f7fa"; +} + +.fa-egg { + --fa: "\f7fb"; +} + +.fa-folder-tree { + --fa: "\f802"; +} + +.fa-burger { + --fa: "\f805"; +} + +.fa-hamburger { + --fa: "\f805"; +} + +.fa-hand-middle-finger { + --fa: "\f806"; +} + +.fa-helmet-safety { + --fa: "\f807"; +} + +.fa-hard-hat { + --fa: "\f807"; +} + +.fa-hat-hard { + --fa: "\f807"; +} + +.fa-hospital-user { + --fa: "\f80d"; +} + +.fa-hotdog { + --fa: "\f80f"; +} + +.fa-ice-cream { + --fa: "\f810"; +} + +.fa-laptop-medical { + --fa: "\f812"; +} + +.fa-pager { + --fa: "\f815"; +} + +.fa-pepper-hot { + --fa: "\f816"; +} + +.fa-pizza-slice { + --fa: "\f818"; +} + +.fa-sack-dollar { + --fa: "\f81d"; +} + +.fa-book-tanakh { + --fa: "\f827"; +} + +.fa-tanakh { + --fa: "\f827"; +} + +.fa-bars-progress { + --fa: "\f828"; +} + +.fa-tasks-alt { + --fa: "\f828"; +} + +.fa-trash-arrow-up { + --fa: "\f829"; +} + +.fa-trash-restore { + --fa: "\f829"; +} + +.fa-trash-can-arrow-up { + --fa: "\f82a"; +} + +.fa-trash-restore-alt { + --fa: "\f82a"; +} .fa-user-nurse { - --fa: "\f82f"; } + --fa: "\f82f"; +} -.fa-syringe { - --fa: "\f48e"; } +.fa-wave-square { + --fa: "\f83e"; +} -.fa-cloud-sun { - --fa: "\f6c4"; } +.fa-person-biking { + --fa: "\f84a"; +} -.fa-stopwatch-20 { - --fa: "\e06f"; } +.fa-biking { + --fa: "\f84a"; +} -.fa-square-full { - --fa: "\f45c"; } +.fa-border-all { + --fa: "\f84c"; +} -.fa-magnet { - --fa: "\f076"; } +.fa-border-none { + --fa: "\f850"; +} -.fa-jar { - --fa: "\e516"; } +.fa-border-top-left { + --fa: "\f853"; +} -.fa-note-sticky { - --fa: "\f249"; } +.fa-border-style { + --fa: "\f853"; +} -.fa-sticky-note { - --fa: "\f249"; } +.fa-person-digging { + --fa: "\f85e"; +} -.fa-bug-slash { - --fa: "\e490"; } +.fa-digging { + --fa: "\f85e"; +} -.fa-arrow-up-from-water-pump { - --fa: "\e4b6"; } +.fa-fan { + --fa: "\f863"; +} -.fa-bone { - --fa: "\f5d7"; } +.fa-icons { + --fa: "\f86d"; +} -.fa-table-cells-row-unlock { - --fa: "\e691"; } +.fa-heart-music-camera-bolt { + --fa: "\f86d"; +} -.fa-user-injured { - --fa: "\f728"; } +.fa-phone-flip { + --fa: "\f879"; +} -.fa-face-sad-tear { - --fa: "\f5b4"; } +.fa-phone-alt { + --fa: "\f879"; +} -.fa-sad-tear { - --fa: "\f5b4"; } +.fa-square-phone-flip { + --fa: "\f87b"; +} -.fa-plane { - --fa: "\f072"; } +.fa-phone-square-alt { + --fa: "\f87b"; +} -.fa-tent-arrows-down { - --fa: "\e581"; } +.fa-photo-film { + --fa: "\f87c"; +} -.fa-exclamation { - --fa: "\21"; } +.fa-photo-video { + --fa: "\f87c"; +} -.fa-arrows-spin { - --fa: "\e4bb"; } +.fa-text-slash { + --fa: "\f87d"; +} -.fa-print { - --fa: "\f02f"; } +.fa-remove-format { + --fa: "\f87d"; +} -.fa-turkish-lira-sign { - --fa: "\e2bb"; } +.fa-arrow-down-z-a { + --fa: "\f881"; +} -.fa-try { - --fa: "\e2bb"; } +.fa-sort-alpha-desc { + --fa: "\f881"; +} -.fa-turkish-lira { - --fa: "\e2bb"; } +.fa-sort-alpha-down-alt { + --fa: "\f881"; +} -.fa-dollar-sign { - --fa: "\24"; } +.fa-arrow-up-z-a { + --fa: "\f882"; +} -.fa-dollar { - --fa: "\24"; } +.fa-sort-alpha-up-alt { + --fa: "\f882"; +} -.fa-usd { - --fa: "\24"; } +.fa-arrow-down-short-wide { + --fa: "\f884"; +} -.fa-x { - --fa: "\58"; } +.fa-sort-amount-desc { + --fa: "\f884"; +} -.fa-magnifying-glass-dollar { - --fa: "\f688"; } +.fa-sort-amount-down-alt { + --fa: "\f884"; +} -.fa-search-dollar { - --fa: "\f688"; } +.fa-arrow-up-short-wide { + --fa: "\f885"; +} -.fa-users-gear { - --fa: "\f509"; } +.fa-sort-amount-up-alt { + --fa: "\f885"; +} -.fa-users-cog { - --fa: "\f509"; } +.fa-arrow-down-9-1 { + --fa: "\f886"; +} -.fa-person-military-pointing { - --fa: "\e54a"; } +.fa-sort-numeric-desc { + --fa: "\f886"; +} -.fa-building-columns { - --fa: "\f19c"; } +.fa-sort-numeric-down-alt { + --fa: "\f886"; +} -.fa-bank { - --fa: "\f19c"; } +.fa-arrow-up-9-1 { + --fa: "\f887"; +} -.fa-institution { - --fa: "\f19c"; } +.fa-sort-numeric-up-alt { + --fa: "\f887"; +} -.fa-museum { - --fa: "\f19c"; } +.fa-spell-check { + --fa: "\f891"; +} -.fa-university { - --fa: "\f19c"; } +.fa-voicemail { + --fa: "\f897"; +} -.fa-umbrella { - --fa: "\f0e9"; } +.fa-hat-cowboy { + --fa: "\f8c0"; +} -.fa-trowel { - --fa: "\e589"; } +.fa-hat-cowboy-side { + --fa: "\f8c1"; +} -.fa-d { - --fa: "\44"; } +.fa-computer-mouse { + --fa: "\f8cc"; +} -.fa-stapler { - --fa: "\e5af"; } +.fa-mouse { + --fa: "\f8cc"; +} -.fa-masks-theater { - --fa: "\f630"; } +.fa-radio { + --fa: "\f8d7"; +} -.fa-theater-masks { - --fa: "\f630"; } +.fa-record-vinyl { + --fa: "\f8d9"; +} -.fa-kip-sign { - --fa: "\e1c4"; } +.fa-walkie-talkie { + --fa: "\f8ef"; +} -.fa-hand-point-left { - --fa: "\f0a5"; } +.fa-caravan { + --fa: "\f8ff"; +} +:root, :host { + --fa-family-brands: 'Font Awesome 7 Brands'; + --fa-font-brands: normal 400 1em/1 var(--fa-family-brands); +} -.fa-handshake-simple { - --fa: "\f4c6"; } +@font-face { + font-family: "Font Awesome 7 Brands"; + font-style: normal; + font-weight: 400; + font-display: block; + src: url("../webfonts/fa-brands-400.woff2"); +} +.fab, +.fa-brands, +.fa-classic.fa-brands { + --fa-family: var(--fa-family-brands); + --fa-style: 400; +} -.fa-handshake-alt { - --fa: "\f4c6"; } +.fa-firefox-browser { + --fa: "\e007"; +} -.fa-jet-fighter { - --fa: "\f0fb"; } +.fa-ideal { + --fa: "\e013"; +} -.fa-fighter-jet { - --fa: "\f0fb"; } +.fa-microblog { + --fa: "\e01a"; +} -.fa-square-share-nodes { - --fa: "\f1e1"; } +.fa-square-pied-piper { + --fa: "\e01e"; +} -.fa-share-alt-square { - --fa: "\f1e1"; } +.fa-pied-piper-square { + --fa: "\e01e"; +} -.fa-barcode { - --fa: "\f02a"; } +.fa-unity { + --fa: "\e049"; +} -.fa-plus-minus { - --fa: "\e43c"; } +.fa-dailymotion { + --fa: "\e052"; +} -.fa-video { - --fa: "\f03d"; } +.fa-square-instagram { + --fa: "\e055"; +} -.fa-video-camera { - --fa: "\f03d"; } +.fa-instagram-square { + --fa: "\e055"; +} -.fa-graduation-cap { - --fa: "\f19d"; } +.fa-mixer { + --fa: "\e056"; +} -.fa-mortar-board { - --fa: "\f19d"; } +.fa-shopify { + --fa: "\e057"; +} -.fa-hand-holding-medical { - --fa: "\e05c"; } +.fa-deezer { + --fa: "\e077"; +} -.fa-person-circle-check { - --fa: "\e53e"; } +.fa-edge-legacy { + --fa: "\e078"; +} -.fa-turn-up { - --fa: "\f3bf"; } +.fa-google-pay { + --fa: "\e079"; +} -.fa-level-up-alt { - --fa: "\f3bf"; } +.fa-rust { + --fa: "\e07a"; +} + +.fa-tiktok { + --fa: "\e07b"; +} + +.fa-unsplash { + --fa: "\e07c"; +} + +.fa-cloudflare { + --fa: "\e07d"; +} + +.fa-guilded { + --fa: "\e07e"; +} + +.fa-hive { + --fa: "\e07f"; +} + +.fa-42-group { + --fa: "\e080"; +} + +.fa-innosoft { + --fa: "\e080"; +} + +.fa-instalod { + --fa: "\e081"; +} + +.fa-octopus-deploy { + --fa: "\e082"; +} + +.fa-perbyte { + --fa: "\e083"; +} + +.fa-uncharted { + --fa: "\e084"; +} + +.fa-watchman-monitoring { + --fa: "\e087"; +} + +.fa-wodu { + --fa: "\e088"; +} + +.fa-wirsindhandwerk { + --fa: "\e2d0"; +} + +.fa-wsh { + --fa: "\e2d0"; +} + +.fa-bots { + --fa: "\e340"; +} + +.fa-cmplid { + --fa: "\e360"; +} + +.fa-bilibili { + --fa: "\e3d9"; +} + +.fa-golang { + --fa: "\e40f"; +} + +.fa-pix { + --fa: "\e43a"; +} + +.fa-sitrox { + --fa: "\e44a"; +} + +.fa-hashnode { + --fa: "\e499"; +} + +.fa-meta { + --fa: "\e49b"; +} + +.fa-padlet { + --fa: "\e4a0"; +} + +.fa-nfc-directional { + --fa: "\e530"; +} + +.fa-nfc-symbol { + --fa: "\e531"; +} + +.fa-screenpal { + --fa: "\e570"; +} + +.fa-space-awesome { + --fa: "\e5ac"; +} + +.fa-square-font-awesome { + --fa: "\e5ad"; +} + +.fa-square-gitlab { + --fa: "\e5ae"; +} + +.fa-gitlab-square { + --fa: "\e5ae"; +} + +.fa-odysee { + --fa: "\e5c6"; +} + +.fa-stubber { + --fa: "\e5c7"; +} + +.fa-debian { + --fa: "\e60b"; +} + +.fa-shoelace { + --fa: "\e60c"; +} + +.fa-threads { + --fa: "\e618"; +} + +.fa-square-threads { + --fa: "\e619"; +} + +.fa-square-x-twitter { + --fa: "\e61a"; +} + +.fa-x-twitter { + --fa: "\e61b"; +} + +.fa-opensuse { + --fa: "\e62b"; +} -.sr-only, -.fa-sr-only { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } - -.sr-only-focusable:not(:focus), -.fa-sr-only-focusable:not(:focus) { - position: absolute; - width: 1px; - height: 1px; - padding: 0; - margin: -1px; - overflow: hidden; - clip: rect(0, 0, 0, 0); - white-space: nowrap; - border-width: 0; } -:root, :host { - --fa-style-family-brands: 'Font Awesome 6 Brands'; - --fa-font-brands: normal 400 1em/1 'Font Awesome 6 Brands'; } +.fa-letterboxd { + --fa: "\e62d"; +} -@font-face { - font-family: 'Font Awesome 6 Brands'; - font-style: normal; - font-weight: 400; - font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } +.fa-square-letterboxd { + --fa: "\e62e"; +} -.fab, -.fa-brands { - font-weight: 400; } +.fa-mintbit { + --fa: "\e62f"; +} -.fa-monero { - --fa: "\f3d0"; } +.fa-google-scholar { + --fa: "\e63b"; +} -.fa-hooli { - --fa: "\f427"; } +.fa-brave { + --fa: "\e63c"; +} -.fa-yelp { - --fa: "\f1e9"; } +.fa-brave-reverse { + --fa: "\e63d"; +} -.fa-cc-visa { - --fa: "\f1f0"; } +.fa-pixiv { + --fa: "\e640"; +} -.fa-lastfm { - --fa: "\f202"; } +.fa-upwork { + --fa: "\e641"; +} -.fa-shopware { - --fa: "\f5b5"; } +.fa-webflow { + --fa: "\e65c"; +} -.fa-creative-commons-nc { - --fa: "\f4e8"; } +.fa-signal-messenger { + --fa: "\e663"; +} -.fa-aws { - --fa: "\f375"; } +.fa-bluesky { + --fa: "\e671"; +} -.fa-redhat { - --fa: "\f7bc"; } +.fa-jxl { + --fa: "\e67b"; +} -.fa-yoast { - --fa: "\f2b1"; } +.fa-square-upwork { + --fa: "\e67c"; +} -.fa-cloudflare { - --fa: "\e07d"; } +.fa-web-awesome { + --fa: "\e682"; +} -.fa-ups { - --fa: "\f7e0"; } +.fa-square-web-awesome { + --fa: "\e683"; +} -.fa-pixiv { - --fa: "\e640"; } +.fa-square-web-awesome-stroke { + --fa: "\e684"; +} -.fa-wpexplorer { - --fa: "\f2de"; } +.fa-dart-lang { + --fa: "\e693"; +} -.fa-dyalog { - --fa: "\f399"; } +.fa-flutter { + --fa: "\e694"; +} -.fa-bity { - --fa: "\f37a"; } +.fa-files-pinwheel { + --fa: "\e69f"; +} -.fa-stackpath { - --fa: "\f842"; } +.fa-css { + --fa: "\e6a2"; +} -.fa-buysellads { - --fa: "\f20d"; } +.fa-square-bluesky { + --fa: "\e6a3"; +} -.fa-first-order { - --fa: "\f2b0"; } +.fa-openai { + --fa: "\e7cf"; +} -.fa-modx { - --fa: "\f285"; } +.fa-square-linkedin { + --fa: "\e7d0"; +} -.fa-guilded { - --fa: "\e07e"; } +.fa-cash-app { + --fa: "\e7d4"; +} -.fa-vnv { - --fa: "\f40b"; } +.fa-disqus { + --fa: "\e7d5"; +} -.fa-square-js { - --fa: "\f3b9"; } +.fa-eleventy { + --fa: "\e7d6"; +} -.fa-js-square { - --fa: "\f3b9"; } +.fa-11ty { + --fa: "\e7d6"; +} -.fa-microsoft { - --fa: "\f3ca"; } +.fa-kakao-talk { + --fa: "\e7d7"; +} -.fa-qq { - --fa: "\f1d6"; } +.fa-linktree { + --fa: "\e7d8"; +} -.fa-orcid { - --fa: "\f8d2"; } +.fa-notion { + --fa: "\e7d9"; +} -.fa-java { - --fa: "\f4e4"; } +.fa-pandora { + --fa: "\e7da"; +} -.fa-invision { - --fa: "\f7b0"; } +.fa-pixelfed { + --fa: "\e7db"; +} -.fa-creative-commons-pd-alt { - --fa: "\f4ed"; } +.fa-tidal { + --fa: "\e7dc"; +} -.fa-centercode { - --fa: "\f380"; } +.fa-vsco { + --fa: "\e7dd"; +} -.fa-glide-g { - --fa: "\f2a6"; } +.fa-w3c { + --fa: "\e7de"; +} -.fa-drupal { - --fa: "\f1a9"; } +.fa-lumon { + --fa: "\e7e2"; +} -.fa-jxl { - --fa: "\e67b"; } +.fa-lumon-drop { + --fa: "\e7e3"; +} -.fa-dart-lang { - --fa: "\e693"; } +.fa-square-figma { + --fa: "\e7e4"; +} -.fa-hire-a-helper { - --fa: "\f3b0"; } +.fa-tex { + --fa: "\e7ff"; +} -.fa-creative-commons-by { - --fa: "\f4e7"; } +.fa-duolingo { + --fa: "\e812"; +} -.fa-unity { - --fa: "\e049"; } +.fa-supportnow { + --fa: "\e833"; +} -.fa-whmcs { - --fa: "\f40d"; } +.fa-tor-browser { + --fa: "\e838"; +} -.fa-rocketchat { - --fa: "\f3e8"; } +.fa-typescript { + --fa: "\e840"; +} -.fa-vk { - --fa: "\f189"; } +.fa-square-deskpro { + --fa: "\e844"; +} -.fa-untappd { - --fa: "\f405"; } +.fa-circle-zulip { + --fa: "\e851"; +} -.fa-mailchimp { - --fa: "\f59e"; } +.fa-julia { + --fa: "\e852"; +} -.fa-css3-alt { - --fa: "\f38b"; } +.fa-zulip { + --fa: "\e853"; +} -.fa-square-reddit { - --fa: "\f1a2"; } +.fa-unison { + --fa: "\e854"; +} -.fa-reddit-square { - --fa: "\f1a2"; } +.fa-board-game-geek { + --fa: "\e855"; +} -.fa-vimeo-v { - --fa: "\f27d"; } +.fa-bgg { + --fa: "\e855"; +} -.fa-contao { - --fa: "\f26d"; } +.fa-ko-fi { + --fa: "\e856"; +} -.fa-square-font-awesome { - --fa: "\e5ad"; } +.fa-kubernetes { + --fa: "\e857"; +} -.fa-deskpro { - --fa: "\f38f"; } +.fa-postgresql { + --fa: "\e858"; +} -.fa-brave { - --fa: "\e63c"; } +.fa-scaleway { + --fa: "\e859"; +} -.fa-sistrix { - --fa: "\f3ee"; } +.fa-venmo { + --fa: "\e85a"; +} -.fa-square-instagram { - --fa: "\e055"; } +.fa-venmo-v { + --fa: "\e85b"; +} -.fa-instagram-square { - --fa: "\e055"; } +.fa-unreal-engine { + --fa: "\e85c"; +} -.fa-battle-net { - --fa: "\f835"; } +.fa-globaleaks { + --fa: "\e85d"; +} -.fa-the-red-yeti { - --fa: "\f69d"; } +.fa-solana { + --fa: "\e85e"; +} -.fa-square-hacker-news { - --fa: "\f3af"; } +.fa-threema { + --fa: "\e85f"; +} -.fa-hacker-news-square { - --fa: "\f3af"; } +.fa-forgejo { + --fa: "\e860"; +} -.fa-edge { - --fa: "\f282"; } +.fa-claude { + --fa: "\e861"; +} -.fa-threads { - --fa: "\e618"; } +.fa-gitee { + --fa: "\e863"; +} -.fa-napster { - --fa: "\f3d2"; } +.fa-xmpp { + --fa: "\e864"; +} -.fa-square-snapchat { - --fa: "\f2ad"; } +.fa-fediverse { + --fa: "\e865"; +} -.fa-snapchat-square { - --fa: "\f2ad"; } +.fa-tailwind-css { + --fa: "\e866"; +} -.fa-google-plus-g { - --fa: "\f0d5"; } +.fa-arch-linux { + --fa: "\e867"; +} -.fa-artstation { - --fa: "\f77a"; } +.fa-svelte { + --fa: "\e868"; +} -.fa-markdown { - --fa: "\f60f"; } +.fa-hugging-face { + --fa: "\e869"; +} -.fa-sourcetree { - --fa: "\f7d3"; } +.fa-leetcode { + --fa: "\e86a"; +} -.fa-google-plus { - --fa: "\f2b3"; } +.fa-openstreetmap { + --fa: "\e86b"; +} -.fa-diaspora { - --fa: "\f791"; } +.fa-ultralytics { + --fa: "\e86d"; +} -.fa-foursquare { - --fa: "\f180"; } +.fa-ultralytics-hub { + --fa: "\e86e"; +} -.fa-stack-overflow { - --fa: "\f16c"; } +.fa-ultralytics-yolo { + --fa: "\e86f"; +} -.fa-github-alt { - --fa: "\f113"; } +.fa-obsidian { + --fa: "\e879"; +} -.fa-phoenix-squadron { - --fa: "\f511"; } +.fa-zoom { + --fa: "\e87b"; +} -.fa-pagelines { - --fa: "\f18c"; } +.fa-vim { + --fa: "\e88a"; +} -.fa-algolia { - --fa: "\f36c"; } +.fa-symfonycasts { + --fa: "\e8ab"; +} -.fa-red-river { - --fa: "\f3e3"; } +.fa-square-twitter { + --fa: "\f081"; +} -.fa-creative-commons-sa { - --fa: "\f4ef"; } +.fa-twitter-square { + --fa: "\f081"; +} -.fa-safari { - --fa: "\f267"; } +.fa-square-facebook { + --fa: "\f082"; +} -.fa-google { - --fa: "\f1a0"; } +.fa-facebook-square { + --fa: "\f082"; +} -.fa-square-font-awesome-stroke { - --fa: "\f35c"; } +.fa-linkedin { + --fa: "\f08c"; +} -.fa-font-awesome-alt { - --fa: "\f35c"; } +.fa-square-github { + --fa: "\f092"; +} -.fa-atlassian { - --fa: "\f77b"; } +.fa-github-square { + --fa: "\f092"; +} -.fa-linkedin-in { - --fa: "\f0e1"; } +.fa-twitter { + --fa: "\f099"; +} -.fa-digital-ocean { - --fa: "\f391"; } +.fa-facebook { + --fa: "\f09a"; +} -.fa-nimblr { - --fa: "\f5a8"; } +.fa-github { + --fa: "\f09b"; +} -.fa-chromecast { - --fa: "\f838"; } +.fa-pinterest { + --fa: "\f0d2"; +} -.fa-evernote { - --fa: "\f839"; } +.fa-square-pinterest { + --fa: "\f0d3"; +} -.fa-hacker-news { - --fa: "\f1d4"; } +.fa-pinterest-square { + --fa: "\f0d3"; +} -.fa-creative-commons-sampling { - --fa: "\f4f0"; } +.fa-square-google-plus { + --fa: "\f0d4"; +} -.fa-adversal { - --fa: "\f36a"; } +.fa-google-plus-square { + --fa: "\f0d4"; +} -.fa-creative-commons { - --fa: "\f25e"; } +.fa-google-plus-g { + --fa: "\f0d5"; +} -.fa-watchman-monitoring { - --fa: "\e087"; } +.fa-linkedin-in { + --fa: "\f0e1"; +} -.fa-fonticons { - --fa: "\f280"; } +.fa-github-alt { + --fa: "\f113"; +} -.fa-weixin { - --fa: "\f1d7"; } +.fa-maxcdn { + --fa: "\f136"; +} -.fa-shirtsinbulk { - --fa: "\f214"; } +.fa-html5 { + --fa: "\f13b"; +} -.fa-codepen { - --fa: "\f1cb"; } +.fa-css3 { + --fa: "\f13c"; +} -.fa-git-alt { - --fa: "\f841"; } +.fa-btc { + --fa: "\f15a"; +} -.fa-lyft { - --fa: "\f3c3"; } +.fa-youtube { + --fa: "\f167"; +} -.fa-rev { - --fa: "\f5b2"; } +.fa-xing { + --fa: "\f168"; +} -.fa-windows { - --fa: "\f17a"; } +.fa-square-xing { + --fa: "\f169"; +} -.fa-wizards-of-the-coast { - --fa: "\f730"; } +.fa-xing-square { + --fa: "\f169"; +} -.fa-square-viadeo { - --fa: "\f2aa"; } +.fa-dropbox { + --fa: "\f16b"; +} -.fa-viadeo-square { - --fa: "\f2aa"; } +.fa-stack-overflow { + --fa: "\f16c"; +} -.fa-meetup { - --fa: "\f2e0"; } +.fa-instagram { + --fa: "\f16d"; +} -.fa-centos { - --fa: "\f789"; } +.fa-flickr { + --fa: "\f16e"; +} .fa-adn { - --fa: "\f170"; } - -.fa-cloudsmith { - --fa: "\f384"; } + --fa: "\f170"; +} -.fa-opensuse { - --fa: "\e62b"; } +.fa-bitbucket { + --fa: "\f171"; +} -.fa-pied-piper-alt { - --fa: "\f1a8"; } +.fa-tumblr { + --fa: "\f173"; +} -.fa-square-dribbble { - --fa: "\f397"; } +.fa-square-tumblr { + --fa: "\f174"; +} -.fa-dribbble-square { - --fa: "\f397"; } +.fa-tumblr-square { + --fa: "\f174"; +} -.fa-codiepie { - --fa: "\f284"; } +.fa-apple { + --fa: "\f179"; +} -.fa-node { - --fa: "\f419"; } +.fa-windows { + --fa: "\f17a"; +} -.fa-mix { - --fa: "\f3cb"; } +.fa-android { + --fa: "\f17b"; +} -.fa-steam { - --fa: "\f1b6"; } +.fa-linux { + --fa: "\f17c"; +} -.fa-cc-apple-pay { - --fa: "\f416"; } +.fa-dribbble { + --fa: "\f17d"; +} -.fa-scribd { - --fa: "\f28a"; } +.fa-skype { + --fa: "\f17e"; +} -.fa-debian { - --fa: "\e60b"; } +.fa-foursquare { + --fa: "\f180"; +} -.fa-openid { - --fa: "\f19b"; } +.fa-trello { + --fa: "\f181"; +} -.fa-instalod { - --fa: "\e081"; } +.fa-gratipay { + --fa: "\f184"; +} -.fa-files-pinwheel { - --fa: "\e69f"; } +.fa-vk { + --fa: "\f189"; +} -.fa-expeditedssl { - --fa: "\f23e"; } +.fa-weibo { + --fa: "\f18a"; +} -.fa-sellcast { - --fa: "\f2da"; } +.fa-renren { + --fa: "\f18b"; +} -.fa-square-twitter { - --fa: "\f081"; } +.fa-pagelines { + --fa: "\f18c"; +} -.fa-twitter-square { - --fa: "\f081"; } +.fa-stack-exchange { + --fa: "\f18d"; +} -.fa-r-project { - --fa: "\f4f7"; } +.fa-square-vimeo { + --fa: "\f194"; +} -.fa-delicious { - --fa: "\f1a5"; } +.fa-vimeo-square { + --fa: "\f194"; +} -.fa-freebsd { - --fa: "\f3a4"; } +.fa-slack { + --fa: "\f198"; +} -.fa-vuejs { - --fa: "\f41f"; } +.fa-slack-hash { + --fa: "\f198"; +} -.fa-accusoft { - --fa: "\f369"; } +.fa-wordpress { + --fa: "\f19a"; +} -.fa-ioxhost { - --fa: "\f208"; } +.fa-openid { + --fa: "\f19b"; +} -.fa-fonticons-fi { - --fa: "\f3a2"; } +.fa-yahoo { + --fa: "\f19e"; +} -.fa-app-store { - --fa: "\f36f"; } +.fa-google { + --fa: "\f1a0"; +} -.fa-cc-mastercard { - --fa: "\f1f1"; } +.fa-reddit { + --fa: "\f1a1"; +} -.fa-itunes-note { - --fa: "\f3b5"; } +.fa-square-reddit { + --fa: "\f1a2"; +} -.fa-golang { - --fa: "\e40f"; } +.fa-reddit-square { + --fa: "\f1a2"; +} -.fa-kickstarter { - --fa: "\f3bb"; } +.fa-stumbleupon-circle { + --fa: "\f1a3"; +} -.fa-square-kickstarter { - --fa: "\f3bb"; } +.fa-stumbleupon { + --fa: "\f1a4"; +} -.fa-grav { - --fa: "\f2d6"; } +.fa-delicious { + --fa: "\f1a5"; +} -.fa-weibo { - --fa: "\f18a"; } +.fa-digg { + --fa: "\f1a6"; +} -.fa-uncharted { - --fa: "\e084"; } +.fa-pied-piper-pp { + --fa: "\f1a7"; +} -.fa-firstdraft { - --fa: "\f3a1"; } +.fa-pied-piper-alt { + --fa: "\f1a8"; +} -.fa-square-youtube { - --fa: "\f431"; } +.fa-drupal { + --fa: "\f1a9"; +} -.fa-youtube-square { - --fa: "\f431"; } +.fa-joomla { + --fa: "\f1aa"; +} -.fa-wikipedia-w { - --fa: "\f266"; } +.fa-behance { + --fa: "\f1b4"; +} -.fa-wpressr { - --fa: "\f3e4"; } +.fa-square-behance { + --fa: "\f1b5"; +} -.fa-rendact { - --fa: "\f3e4"; } +.fa-behance-square { + --fa: "\f1b5"; +} -.fa-angellist { - --fa: "\f209"; } +.fa-steam { + --fa: "\f1b6"; +} -.fa-galactic-republic { - --fa: "\f50c"; } +.fa-square-steam { + --fa: "\f1b7"; +} -.fa-nfc-directional { - --fa: "\e530"; } +.fa-steam-square { + --fa: "\f1b7"; +} -.fa-skype { - --fa: "\f17e"; } +.fa-spotify { + --fa: "\f1bc"; +} -.fa-joget { - --fa: "\f3b7"; } +.fa-deviantart { + --fa: "\f1bd"; +} -.fa-fedora { - --fa: "\f798"; } +.fa-soundcloud { + --fa: "\f1be"; +} -.fa-stripe-s { - --fa: "\f42a"; } +.fa-vine { + --fa: "\f1ca"; +} -.fa-meta { - --fa: "\e49b"; } +.fa-codepen { + --fa: "\f1cb"; +} -.fa-laravel { - --fa: "\f3bd"; } +.fa-jsfiddle { + --fa: "\f1cc"; +} -.fa-hotjar { - --fa: "\f3b1"; } +.fa-rebel { + --fa: "\f1d0"; +} -.fa-bluetooth-b { - --fa: "\f294"; } +.fa-empire { + --fa: "\f1d1"; +} -.fa-square-letterboxd { - --fa: "\e62e"; } +.fa-square-git { + --fa: "\f1d2"; +} -.fa-sticker-mule { - --fa: "\f3f7"; } +.fa-git-square { + --fa: "\f1d2"; +} -.fa-creative-commons-zero { - --fa: "\f4f3"; } +.fa-git { + --fa: "\f1d3"; +} -.fa-hips { - --fa: "\f452"; } +.fa-hacker-news { + --fa: "\f1d4"; +} -.fa-css { - --fa: "\e6a2"; } +.fa-tencent-weibo { + --fa: "\f1d5"; +} -.fa-behance { - --fa: "\f1b4"; } +.fa-qq { + --fa: "\f1d6"; +} -.fa-reddit { - --fa: "\f1a1"; } +.fa-weixin { + --fa: "\f1d7"; +} -.fa-discord { - --fa: "\f392"; } +.fa-slideshare { + --fa: "\f1e7"; +} -.fa-chrome { - --fa: "\f268"; } +.fa-twitch { + --fa: "\f1e8"; +} -.fa-app-store-ios { - --fa: "\f370"; } +.fa-yelp { + --fa: "\f1e9"; +} -.fa-cc-discover { - --fa: "\f1f2"; } +.fa-paypal { + --fa: "\f1ed"; +} -.fa-wpbeginner { - --fa: "\f297"; } +.fa-google-wallet { + --fa: "\f1ee"; +} -.fa-confluence { - --fa: "\f78d"; } +.fa-cc-visa { + --fa: "\f1f0"; +} -.fa-shoelace { - --fa: "\e60c"; } +.fa-cc-mastercard { + --fa: "\f1f1"; +} -.fa-mdb { - --fa: "\f8ca"; } +.fa-cc-discover { + --fa: "\f1f2"; +} -.fa-dochub { - --fa: "\f394"; } +.fa-cc-amex { + --fa: "\f1f3"; +} -.fa-accessible-icon { - --fa: "\f368"; } +.fa-cc-paypal { + --fa: "\f1f4"; +} -.fa-ebay { - --fa: "\f4f4"; } +.fa-cc-stripe { + --fa: "\f1f5"; +} -.fa-amazon { - --fa: "\f270"; } +.fa-lastfm { + --fa: "\f202"; +} -.fa-unsplash { - --fa: "\e07c"; } +.fa-square-lastfm { + --fa: "\f203"; +} -.fa-yarn { - --fa: "\f7e3"; } +.fa-lastfm-square { + --fa: "\f203"; +} -.fa-square-steam { - --fa: "\f1b7"; } +.fa-ioxhost { + --fa: "\f208"; +} -.fa-steam-square { - --fa: "\f1b7"; } +.fa-angellist { + --fa: "\f209"; +} -.fa-500px { - --fa: "\f26e"; } +.fa-buysellads { + --fa: "\f20d"; +} -.fa-square-vimeo { - --fa: "\f194"; } +.fa-connectdevelop { + --fa: "\f20e"; +} -.fa-vimeo-square { - --fa: "\f194"; } +.fa-dashcube { + --fa: "\f210"; +} -.fa-asymmetrik { - --fa: "\f372"; } +.fa-forumbee { + --fa: "\f211"; +} -.fa-font-awesome { - --fa: "\f2b4"; } +.fa-leanpub { + --fa: "\f212"; +} -.fa-font-awesome-flag { - --fa: "\f2b4"; } +.fa-sellsy { + --fa: "\f213"; +} -.fa-font-awesome-logo-full { - --fa: "\f2b4"; } +.fa-shirtsinbulk { + --fa: "\f214"; +} -.fa-gratipay { - --fa: "\f184"; } +.fa-simplybuilt { + --fa: "\f215"; +} -.fa-apple { - --fa: "\f179"; } +.fa-skyatlas { + --fa: "\f216"; +} -.fa-hive { - --fa: "\e07f"; } +.fa-pinterest-p { + --fa: "\f231"; +} -.fa-gitkraken { - --fa: "\f3a6"; } +.fa-whatsapp { + --fa: "\f232"; +} -.fa-keybase { - --fa: "\f4f5"; } +.fa-viacoin { + --fa: "\f237"; +} -.fa-apple-pay { - --fa: "\f415"; } +.fa-medium { + --fa: "\f23a"; +} -.fa-padlet { - --fa: "\e4a0"; } +.fa-medium-m { + --fa: "\f23a"; +} -.fa-amazon-pay { - --fa: "\f42c"; } +.fa-y-combinator { + --fa: "\f23b"; +} -.fa-square-github { - --fa: "\f092"; } +.fa-optin-monster { + --fa: "\f23c"; +} -.fa-github-square { - --fa: "\f092"; } +.fa-opencart { + --fa: "\f23d"; +} -.fa-stumbleupon { - --fa: "\f1a4"; } +.fa-expeditedssl { + --fa: "\f23e"; +} -.fa-fedex { - --fa: "\f797"; } +.fa-cc-jcb { + --fa: "\f24b"; +} -.fa-phoenix-framework { - --fa: "\f3dc"; } +.fa-cc-diners-club { + --fa: "\f24c"; +} -.fa-shopify { - --fa: "\e057"; } +.fa-creative-commons { + --fa: "\f25e"; +} -.fa-neos { - --fa: "\f612"; } +.fa-gg { + --fa: "\f260"; +} -.fa-square-threads { - --fa: "\e619"; } +.fa-gg-circle { + --fa: "\f261"; +} -.fa-hackerrank { - --fa: "\f5f7"; } +.fa-odnoklassniki { + --fa: "\f263"; +} -.fa-researchgate { - --fa: "\f4f8"; } +.fa-square-odnoklassniki { + --fa: "\f264"; +} -.fa-swift { - --fa: "\f8e1"; } +.fa-odnoklassniki-square { + --fa: "\f264"; +} -.fa-angular { - --fa: "\f420"; } +.fa-get-pocket { + --fa: "\f265"; +} -.fa-speakap { - --fa: "\f3f3"; } +.fa-wikipedia-w { + --fa: "\f266"; +} -.fa-angrycreative { - --fa: "\f36e"; } +.fa-safari { + --fa: "\f267"; +} -.fa-y-combinator { - --fa: "\f23b"; } +.fa-chrome { + --fa: "\f268"; +} -.fa-empire { - --fa: "\f1d1"; } +.fa-firefox { + --fa: "\f269"; +} -.fa-envira { - --fa: "\f299"; } +.fa-opera { + --fa: "\f26a"; +} -.fa-google-scholar { - --fa: "\e63b"; } +.fa-internet-explorer { + --fa: "\f26b"; +} -.fa-square-gitlab { - --fa: "\e5ae"; } +.fa-contao { + --fa: "\f26d"; +} -.fa-gitlab-square { - --fa: "\e5ae"; } +.fa-500px { + --fa: "\f26e"; +} -.fa-studiovinari { - --fa: "\f3f8"; } +.fa-amazon { + --fa: "\f270"; +} -.fa-pied-piper { - --fa: "\f2ae"; } +.fa-houzz { + --fa: "\f27c"; +} -.fa-wordpress { - --fa: "\f19a"; } +.fa-vimeo-v { + --fa: "\f27d"; +} -.fa-product-hunt { - --fa: "\f288"; } +.fa-black-tie { + --fa: "\f27e"; +} -.fa-firefox { - --fa: "\f269"; } +.fa-fonticons { + --fa: "\f280"; +} -.fa-linode { - --fa: "\f2b8"; } +.fa-reddit-alien { + --fa: "\f281"; +} -.fa-goodreads { - --fa: "\f3a8"; } +.fa-edge { + --fa: "\f282"; +} -.fa-square-odnoklassniki { - --fa: "\f264"; } +.fa-codiepie { + --fa: "\f284"; +} -.fa-odnoklassniki-square { - --fa: "\f264"; } +.fa-modx { + --fa: "\f285"; +} -.fa-jsfiddle { - --fa: "\f1cc"; } +.fa-fort-awesome { + --fa: "\f286"; +} -.fa-sith { - --fa: "\f512"; } +.fa-usb { + --fa: "\f287"; +} -.fa-themeisle { - --fa: "\f2b2"; } +.fa-product-hunt { + --fa: "\f288"; +} -.fa-page4 { - --fa: "\f3d7"; } +.fa-mixcloud { + --fa: "\f289"; +} -.fa-hashnode { - --fa: "\e499"; } +.fa-scribd { + --fa: "\f28a"; +} -.fa-react { - --fa: "\f41b"; } +.fa-bluetooth { + --fa: "\f293"; +} -.fa-cc-paypal { - --fa: "\f1f4"; } +.fa-bluetooth-b { + --fa: "\f294"; +} -.fa-squarespace { - --fa: "\f5be"; } +.fa-gitlab { + --fa: "\f296"; +} -.fa-cc-stripe { - --fa: "\f1f5"; } +.fa-wpbeginner { + --fa: "\f297"; +} -.fa-creative-commons-share { - --fa: "\f4f2"; } +.fa-wpforms { + --fa: "\f298"; +} -.fa-bitcoin { - --fa: "\f379"; } +.fa-envira { + --fa: "\f299"; +} -.fa-keycdn { - --fa: "\f3ba"; } +.fa-glide { + --fa: "\f2a5"; +} -.fa-opera { - --fa: "\f26a"; } +.fa-glide-g { + --fa: "\f2a6"; +} -.fa-itch-io { - --fa: "\f83a"; } +.fa-viadeo { + --fa: "\f2a9"; +} -.fa-umbraco { - --fa: "\f8e8"; } +.fa-square-viadeo { + --fa: "\f2aa"; +} -.fa-galactic-senate { - --fa: "\f50d"; } +.fa-viadeo-square { + --fa: "\f2aa"; +} -.fa-ubuntu { - --fa: "\f7df"; } +.fa-snapchat { + --fa: "\f2ab"; +} -.fa-draft2digital { - --fa: "\f396"; } +.fa-snapchat-ghost { + --fa: "\f2ab"; +} -.fa-stripe { - --fa: "\f429"; } +.fa-square-snapchat { + --fa: "\f2ad"; +} -.fa-houzz { - --fa: "\f27c"; } +.fa-snapchat-square { + --fa: "\f2ad"; +} -.fa-gg { - --fa: "\f260"; } +.fa-pied-piper { + --fa: "\f2ae"; +} -.fa-dhl { - --fa: "\f790"; } +.fa-first-order { + --fa: "\f2b0"; +} -.fa-square-pinterest { - --fa: "\f0d3"; } +.fa-yoast { + --fa: "\f2b1"; +} -.fa-pinterest-square { - --fa: "\f0d3"; } +.fa-themeisle { + --fa: "\f2b2"; +} -.fa-xing { - --fa: "\f168"; } +.fa-google-plus { + --fa: "\f2b3"; +} -.fa-blackberry { - --fa: "\f37b"; } +.fa-font-awesome { + --fa: "\f2b4"; +} -.fa-creative-commons-pd { - --fa: "\f4ec"; } +.fa-font-awesome-flag { + --fa: "\f2b4"; +} -.fa-playstation { - --fa: "\f3df"; } +.fa-font-awesome-logo-full { + --fa: "\f2b4"; +} -.fa-quinscape { - --fa: "\f459"; } +.fa-linode { + --fa: "\f2b8"; +} -.fa-less { - --fa: "\f41d"; } +.fa-quora { + --fa: "\f2c4"; +} -.fa-blogger-b { - --fa: "\f37d"; } +.fa-free-code-camp { + --fa: "\f2c5"; +} -.fa-opencart { - --fa: "\f23d"; } +.fa-telegram { + --fa: "\f2c6"; +} -.fa-vine { - --fa: "\f1ca"; } +.fa-telegram-plane { + --fa: "\f2c6"; +} -.fa-signal-messenger { - --fa: "\e663"; } +.fa-bandcamp { + --fa: "\f2d5"; +} -.fa-paypal { - --fa: "\f1ed"; } +.fa-grav { + --fa: "\f2d6"; +} -.fa-gitlab { - --fa: "\f296"; } +.fa-etsy { + --fa: "\f2d7"; +} -.fa-typo3 { - --fa: "\f42b"; } +.fa-imdb { + --fa: "\f2d8"; +} -.fa-reddit-alien { - --fa: "\f281"; } +.fa-ravelry { + --fa: "\f2d9"; +} -.fa-yahoo { - --fa: "\f19e"; } +.fa-sellcast { + --fa: "\f2da"; +} -.fa-dailymotion { - --fa: "\e052"; } +.fa-superpowers { + --fa: "\f2dd"; +} -.fa-affiliatetheme { - --fa: "\f36b"; } +.fa-wpexplorer { + --fa: "\f2de"; +} -.fa-pied-piper-pp { - --fa: "\f1a7"; } +.fa-meetup { + --fa: "\f2e0"; +} -.fa-bootstrap { - --fa: "\f836"; } +.fa-square-font-awesome-stroke { + --fa: "\f35c"; +} -.fa-odnoklassniki { - --fa: "\f263"; } +.fa-font-awesome-alt { + --fa: "\f35c"; +} -.fa-nfc-symbol { - --fa: "\e531"; } +.fa-accessible-icon { + --fa: "\f368"; +} -.fa-mintbit { - --fa: "\e62f"; } +.fa-accusoft { + --fa: "\f369"; +} -.fa-ethereum { - --fa: "\f42e"; } +.fa-adversal { + --fa: "\f36a"; +} -.fa-speaker-deck { - --fa: "\f83c"; } +.fa-affiliatetheme { + --fa: "\f36b"; +} -.fa-creative-commons-nc-eu { - --fa: "\f4e9"; } +.fa-algolia { + --fa: "\f36c"; +} -.fa-patreon { - --fa: "\f3d9"; } +.fa-amilia { + --fa: "\f36d"; +} -.fa-avianex { - --fa: "\f374"; } +.fa-angrycreative { + --fa: "\f36e"; +} -.fa-ello { - --fa: "\f5f1"; } +.fa-app-store { + --fa: "\f36f"; +} -.fa-gofore { - --fa: "\f3a7"; } +.fa-app-store-ios { + --fa: "\f370"; +} -.fa-bimobject { - --fa: "\f378"; } +.fa-apper { + --fa: "\f371"; +} -.fa-brave-reverse { - --fa: "\e63d"; } +.fa-asymmetrik { + --fa: "\f372"; +} -.fa-facebook-f { - --fa: "\f39e"; } +.fa-audible { + --fa: "\f373"; +} -.fa-square-google-plus { - --fa: "\f0d4"; } +.fa-avianex { + --fa: "\f374"; +} -.fa-google-plus-square { - --fa: "\f0d4"; } +.fa-aws { + --fa: "\f375"; +} -.fa-web-awesome { - --fa: "\e682"; } +.fa-bimobject { + --fa: "\f378"; +} -.fa-mandalorian { - --fa: "\f50f"; } +.fa-bitcoin { + --fa: "\f379"; +} -.fa-first-order-alt { - --fa: "\f50a"; } +.fa-bity { + --fa: "\f37a"; +} -.fa-osi { - --fa: "\f41a"; } +.fa-blackberry { + --fa: "\f37b"; +} -.fa-google-wallet { - --fa: "\f1ee"; } +.fa-blogger { + --fa: "\f37c"; +} -.fa-d-and-d-beyond { - --fa: "\f6ca"; } +.fa-blogger-b { + --fa: "\f37d"; +} -.fa-periscope { - --fa: "\f3da"; } +.fa-buromobelexperte { + --fa: "\f37f"; +} -.fa-fulcrum { - --fa: "\f50b"; } +.fa-centercode { + --fa: "\f380"; +} .fa-cloudscale { - --fa: "\f383"; } - -.fa-forumbee { - --fa: "\f211"; } + --fa: "\f383"; +} -.fa-mizuni { - --fa: "\f3cc"; } +.fa-cloudsmith { + --fa: "\f384"; +} -.fa-schlix { - --fa: "\f3ea"; } +.fa-cloudversify { + --fa: "\f385"; +} -.fa-square-xing { - --fa: "\f169"; } +.fa-cpanel { + --fa: "\f388"; +} -.fa-xing-square { - --fa: "\f169"; } +.fa-css3-alt { + --fa: "\f38b"; +} -.fa-bandcamp { - --fa: "\f2d5"; } +.fa-cuttlefish { + --fa: "\f38c"; +} -.fa-wpforms { - --fa: "\f298"; } +.fa-d-and-d { + --fa: "\f38d"; +} -.fa-cloudversify { - --fa: "\f385"; } +.fa-deploydog { + --fa: "\f38e"; +} -.fa-usps { - --fa: "\f7e1"; } +.fa-deskpro { + --fa: "\f38f"; +} -.fa-megaport { - --fa: "\f5a3"; } +.fa-digital-ocean { + --fa: "\f391"; +} -.fa-magento { - --fa: "\f3c4"; } +.fa-discord { + --fa: "\f392"; +} -.fa-spotify { - --fa: "\f1bc"; } +.fa-discourse { + --fa: "\f393"; +} -.fa-optin-monster { - --fa: "\f23c"; } +.fa-dochub { + --fa: "\f394"; +} -.fa-fly { - --fa: "\f417"; } +.fa-docker { + --fa: "\f395"; +} -.fa-square-bluesky { - --fa: "\e6a3"; } +.fa-draft2digital { + --fa: "\f396"; +} -.fa-aviato { - --fa: "\f421"; } +.fa-square-dribbble { + --fa: "\f397"; +} -.fa-itunes { - --fa: "\f3b4"; } +.fa-dribbble-square { + --fa: "\f397"; +} -.fa-cuttlefish { - --fa: "\f38c"; } +.fa-dyalog { + --fa: "\f399"; +} -.fa-blogger { - --fa: "\f37c"; } +.fa-earlybirds { + --fa: "\f39a"; +} -.fa-flickr { - --fa: "\f16e"; } +.fa-erlang { + --fa: "\f39d"; +} -.fa-viber { - --fa: "\f409"; } +.fa-facebook-f { + --fa: "\f39e"; +} -.fa-soundcloud { - --fa: "\f1be"; } +.fa-facebook-messenger { + --fa: "\f39f"; +} -.fa-digg { - --fa: "\f1a6"; } +.fa-firstdraft { + --fa: "\f3a1"; +} -.fa-tencent-weibo { - --fa: "\f1d5"; } +.fa-fonticons-fi { + --fa: "\f3a2"; +} -.fa-letterboxd { - --fa: "\e62d"; } +.fa-fort-awesome-alt { + --fa: "\f3a3"; +} -.fa-symfony { - --fa: "\f83d"; } +.fa-freebsd { + --fa: "\f3a4"; +} -.fa-maxcdn { - --fa: "\f136"; } +.fa-gitkraken { + --fa: "\f3a6"; +} -.fa-etsy { - --fa: "\f2d7"; } +.fa-gofore { + --fa: "\f3a7"; +} -.fa-facebook-messenger { - --fa: "\f39f"; } +.fa-goodreads { + --fa: "\f3a8"; +} -.fa-audible { - --fa: "\f373"; } +.fa-goodreads-g { + --fa: "\f3a9"; +} -.fa-think-peaks { - --fa: "\f731"; } +.fa-google-drive { + --fa: "\f3aa"; +} -.fa-bilibili { - --fa: "\e3d9"; } +.fa-google-play { + --fa: "\f3ab"; +} -.fa-erlang { - --fa: "\f39d"; } +.fa-gripfire { + --fa: "\f3ac"; +} -.fa-x-twitter { - --fa: "\e61b"; } +.fa-grunt { + --fa: "\f3ad"; +} -.fa-cotton-bureau { - --fa: "\f89e"; } +.fa-gulp { + --fa: "\f3ae"; +} -.fa-dashcube { - --fa: "\f210"; } +.fa-square-hacker-news { + --fa: "\f3af"; +} -.fa-42-group { - --fa: "\e080"; } +.fa-hacker-news-square { + --fa: "\f3af"; +} -.fa-innosoft { - --fa: "\e080"; } +.fa-hire-a-helper { + --fa: "\f3b0"; +} -.fa-stack-exchange { - --fa: "\f18d"; } +.fa-hotjar { + --fa: "\f3b1"; +} -.fa-elementor { - --fa: "\f430"; } +.fa-hubspot { + --fa: "\f3b2"; +} -.fa-square-pied-piper { - --fa: "\e01e"; } +.fa-itunes { + --fa: "\f3b4"; +} -.fa-pied-piper-square { - --fa: "\e01e"; } +.fa-itunes-note { + --fa: "\f3b5"; +} -.fa-creative-commons-nd { - --fa: "\f4eb"; } +.fa-jenkins { + --fa: "\f3b6"; +} -.fa-palfed { - --fa: "\f3d8"; } +.fa-joget { + --fa: "\f3b7"; +} -.fa-superpowers { - --fa: "\f2dd"; } +.fa-js { + --fa: "\f3b8"; +} -.fa-resolving { - --fa: "\f3e7"; } +.fa-square-js { + --fa: "\f3b9"; +} -.fa-xbox { - --fa: "\f412"; } +.fa-js-square { + --fa: "\f3b9"; +} -.fa-square-web-awesome-stroke { - --fa: "\e684"; } +.fa-keycdn { + --fa: "\f3ba"; +} -.fa-searchengin { - --fa: "\f3eb"; } +.fa-kickstarter { + --fa: "\f3bb"; +} -.fa-tiktok { - --fa: "\e07b"; } +.fa-square-kickstarter { + --fa: "\f3bb"; +} -.fa-square-facebook { - --fa: "\f082"; } +.fa-kickstarter-k { + --fa: "\f3bc"; +} -.fa-facebook-square { - --fa: "\f082"; } +.fa-laravel { + --fa: "\f3bd"; +} -.fa-renren { - --fa: "\f18b"; } +.fa-line { + --fa: "\f3c0"; +} -.fa-linux { - --fa: "\f17c"; } +.fa-lyft { + --fa: "\f3c3"; +} -.fa-glide { - --fa: "\f2a5"; } +.fa-magento { + --fa: "\f3c4"; +} -.fa-linkedin { - --fa: "\f08c"; } +.fa-medapps { + --fa: "\f3c6"; +} -.fa-hubspot { - --fa: "\f3b2"; } +.fa-medrt { + --fa: "\f3c8"; +} -.fa-deploydog { - --fa: "\f38e"; } +.fa-microsoft { + --fa: "\f3ca"; +} -.fa-twitch { - --fa: "\f1e8"; } +.fa-mix { + --fa: "\f3cb"; +} -.fa-flutter { - --fa: "\e694"; } +.fa-mizuni { + --fa: "\f3cc"; +} -.fa-ravelry { - --fa: "\f2d9"; } +.fa-monero { + --fa: "\f3d0"; +} -.fa-mixer { - --fa: "\e056"; } +.fa-napster { + --fa: "\f3d2"; +} -.fa-square-lastfm { - --fa: "\f203"; } +.fa-node-js { + --fa: "\f3d3"; +} -.fa-lastfm-square { - --fa: "\f203"; } +.fa-npm { + --fa: "\f3d4"; +} -.fa-vimeo { - --fa: "\f40a"; } +.fa-ns8 { + --fa: "\f3d5"; +} -.fa-mendeley { - --fa: "\f7b3"; } +.fa-nutritionix { + --fa: "\f3d6"; +} -.fa-uniregistry { - --fa: "\f404"; } +.fa-page4 { + --fa: "\f3d7"; +} -.fa-figma { - --fa: "\f799"; } +.fa-palfed { + --fa: "\f3d8"; +} -.fa-creative-commons-remix { - --fa: "\f4ee"; } +.fa-patreon { + --fa: "\f3d9"; +} -.fa-cc-amazon-pay { - --fa: "\f42d"; } +.fa-periscope { + --fa: "\f3da"; +} -.fa-dropbox { - --fa: "\f16b"; } +.fa-phabricator { + --fa: "\f3db"; +} -.fa-instagram { - --fa: "\f16d"; } +.fa-phoenix-framework { + --fa: "\f3dc"; +} -.fa-cmplid { - --fa: "\e360"; } +.fa-playstation { + --fa: "\f3df"; +} -.fa-upwork { - --fa: "\e641"; } +.fa-pushed { + --fa: "\f3e1"; +} -.fa-facebook { - --fa: "\f09a"; } +.fa-python { + --fa: "\f3e2"; +} -.fa-gripfire { - --fa: "\f3ac"; } +.fa-red-river { + --fa: "\f3e3"; +} -.fa-jedi-order { - --fa: "\f50e"; } +.fa-wpressr { + --fa: "\f3e4"; +} -.fa-uikit { - --fa: "\f403"; } +.fa-rendact { + --fa: "\f3e4"; +} -.fa-fort-awesome-alt { - --fa: "\f3a3"; } +.fa-replyd { + --fa: "\f3e6"; +} -.fa-phabricator { - --fa: "\f3db"; } +.fa-resolving { + --fa: "\f3e7"; +} -.fa-ussunnah { - --fa: "\f407"; } +.fa-rocketchat { + --fa: "\f3e8"; +} -.fa-earlybirds { - --fa: "\f39a"; } +.fa-rockrms { + --fa: "\f3e9"; +} -.fa-trade-federation { - --fa: "\f513"; } +.fa-schlix { + --fa: "\f3ea"; +} -.fa-autoprefixer { - --fa: "\f41c"; } +.fa-searchengin { + --fa: "\f3eb"; +} -.fa-whatsapp { - --fa: "\f232"; } +.fa-servicestack { + --fa: "\f3ec"; +} -.fa-square-upwork { - --fa: "\e67c"; } +.fa-sistrix { + --fa: "\f3ee"; +} -.fa-slideshare { - --fa: "\f1e7"; } +.fa-speakap { + --fa: "\f3f3"; +} -.fa-google-play { - --fa: "\f3ab"; } +.fa-staylinked { + --fa: "\f3f5"; +} -.fa-viadeo { - --fa: "\f2a9"; } +.fa-steam-symbol { + --fa: "\f3f6"; +} -.fa-line { - --fa: "\f3c0"; } +.fa-sticker-mule { + --fa: "\f3f7"; +} -.fa-google-drive { - --fa: "\f3aa"; } +.fa-studiovinari { + --fa: "\f3f8"; +} -.fa-servicestack { - --fa: "\f3ec"; } +.fa-supple { + --fa: "\f3f9"; +} -.fa-simplybuilt { - --fa: "\f215"; } +.fa-uber { + --fa: "\f402"; +} -.fa-bitbucket { - --fa: "\f171"; } +.fa-uikit { + --fa: "\f403"; +} -.fa-imdb { - --fa: "\f2d8"; } +.fa-uniregistry { + --fa: "\f404"; +} -.fa-deezer { - --fa: "\e077"; } +.fa-untappd { + --fa: "\f405"; +} -.fa-raspberry-pi { - --fa: "\f7bb"; } +.fa-ussunnah { + --fa: "\f407"; +} -.fa-jira { - --fa: "\f7b1"; } +.fa-vaadin { + --fa: "\f408"; +} -.fa-docker { - --fa: "\f395"; } +.fa-viber { + --fa: "\f409"; +} -.fa-screenpal { - --fa: "\e570"; } +.fa-vimeo { + --fa: "\f40a"; +} -.fa-bluetooth { - --fa: "\f293"; } +.fa-vnv { + --fa: "\f40b"; +} -.fa-gitter { - --fa: "\f426"; } +.fa-square-whatsapp { + --fa: "\f40c"; +} -.fa-d-and-d { - --fa: "\f38d"; } +.fa-whatsapp-square { + --fa: "\f40c"; +} -.fa-microblog { - --fa: "\e01a"; } +.fa-whmcs { + --fa: "\f40d"; +} -.fa-cc-diners-club { - --fa: "\f24c"; } +.fa-wordpress-simple { + --fa: "\f411"; +} -.fa-gg-circle { - --fa: "\f261"; } +.fa-xbox { + --fa: "\f412"; +} -.fa-pied-piper-hat { - --fa: "\f4e5"; } +.fa-yandex { + --fa: "\f413"; +} -.fa-kickstarter-k { - --fa: "\f3bc"; } +.fa-yandex-international { + --fa: "\f414"; +} -.fa-yandex { - --fa: "\f413"; } +.fa-apple-pay { + --fa: "\f415"; +} -.fa-readme { - --fa: "\f4d5"; } +.fa-cc-apple-pay { + --fa: "\f416"; +} -.fa-html5 { - --fa: "\f13b"; } +.fa-fly { + --fa: "\f417"; +} -.fa-sellsy { - --fa: "\f213"; } +.fa-node { + --fa: "\f419"; +} -.fa-square-web-awesome { - --fa: "\e683"; } +.fa-osi { + --fa: "\f41a"; +} -.fa-sass { - --fa: "\f41e"; } +.fa-react { + --fa: "\f41b"; +} -.fa-wirsindhandwerk { - --fa: "\e2d0"; } +.fa-autoprefixer { + --fa: "\f41c"; +} -.fa-wsh { - --fa: "\e2d0"; } +.fa-less { + --fa: "\f41d"; +} -.fa-buromobelexperte { - --fa: "\f37f"; } +.fa-sass { + --fa: "\f41e"; +} -.fa-salesforce { - --fa: "\f83b"; } +.fa-vuejs { + --fa: "\f41f"; +} -.fa-octopus-deploy { - --fa: "\e082"; } +.fa-angular { + --fa: "\f420"; +} -.fa-medapps { - --fa: "\f3c6"; } +.fa-aviato { + --fa: "\f421"; +} -.fa-ns8 { - --fa: "\f3d5"; } +.fa-ember { + --fa: "\f423"; +} -.fa-pinterest-p { - --fa: "\f231"; } +.fa-gitter { + --fa: "\f426"; +} -.fa-apper { - --fa: "\f371"; } +.fa-hooli { + --fa: "\f427"; +} -.fa-fort-awesome { - --fa: "\f286"; } +.fa-strava { + --fa: "\f428"; +} -.fa-waze { - --fa: "\f83f"; } +.fa-stripe { + --fa: "\f429"; +} -.fa-bluesky { - --fa: "\e671"; } +.fa-stripe-s { + --fa: "\f42a"; +} -.fa-cc-jcb { - --fa: "\f24b"; } +.fa-typo3 { + --fa: "\f42b"; +} -.fa-snapchat { - --fa: "\f2ab"; } +.fa-amazon-pay { + --fa: "\f42c"; +} -.fa-snapchat-ghost { - --fa: "\f2ab"; } +.fa-cc-amazon-pay { + --fa: "\f42d"; +} -.fa-fantasy-flight-games { - --fa: "\f6dc"; } +.fa-ethereum { + --fa: "\f42e"; +} -.fa-rust { - --fa: "\e07a"; } +.fa-korvue { + --fa: "\f42f"; +} -.fa-wix { - --fa: "\f5cf"; } +.fa-elementor { + --fa: "\f430"; +} -.fa-square-behance { - --fa: "\f1b5"; } +.fa-square-youtube { + --fa: "\f431"; +} -.fa-behance-square { - --fa: "\f1b5"; } +.fa-youtube-square { + --fa: "\f431"; +} -.fa-supple { - --fa: "\f3f9"; } +.fa-flipboard { + --fa: "\f44d"; +} -.fa-webflow { - --fa: "\e65c"; } +.fa-hips { + --fa: "\f452"; +} -.fa-rebel { - --fa: "\f1d0"; } +.fa-php { + --fa: "\f457"; +} -.fa-css3 { - --fa: "\f13c"; } +.fa-quinscape { + --fa: "\f459"; +} -.fa-staylinked { - --fa: "\f3f5"; } +.fa-readme { + --fa: "\f4d5"; +} -.fa-kaggle { - --fa: "\f5fa"; } +.fa-java { + --fa: "\f4e4"; +} -.fa-space-awesome { - --fa: "\e5ac"; } +.fa-pied-piper-hat { + --fa: "\f4e5"; +} -.fa-deviantart { - --fa: "\f1bd"; } +.fa-creative-commons-by { + --fa: "\f4e7"; +} -.fa-cpanel { - --fa: "\f388"; } +.fa-creative-commons-nc { + --fa: "\f4e8"; +} -.fa-goodreads-g { - --fa: "\f3a9"; } +.fa-creative-commons-nc-eu { + --fa: "\f4e9"; +} -.fa-square-git { - --fa: "\f1d2"; } +.fa-creative-commons-nc-jp { + --fa: "\f4ea"; +} -.fa-git-square { - --fa: "\f1d2"; } +.fa-creative-commons-nd { + --fa: "\f4eb"; +} -.fa-square-tumblr { - --fa: "\f174"; } +.fa-creative-commons-pd { + --fa: "\f4ec"; +} -.fa-tumblr-square { - --fa: "\f174"; } +.fa-creative-commons-pd-alt { + --fa: "\f4ed"; +} -.fa-trello { - --fa: "\f181"; } +.fa-creative-commons-remix { + --fa: "\f4ee"; +} -.fa-creative-commons-nc-jp { - --fa: "\f4ea"; } +.fa-creative-commons-sa { + --fa: "\f4ef"; +} -.fa-get-pocket { - --fa: "\f265"; } +.fa-creative-commons-sampling { + --fa: "\f4f0"; +} -.fa-perbyte { - --fa: "\e083"; } +.fa-creative-commons-sampling-plus { + --fa: "\f4f1"; +} -.fa-grunt { - --fa: "\f3ad"; } +.fa-creative-commons-share { + --fa: "\f4f2"; +} -.fa-weebly { - --fa: "\f5cc"; } +.fa-creative-commons-zero { + --fa: "\f4f3"; +} -.fa-connectdevelop { - --fa: "\f20e"; } +.fa-ebay { + --fa: "\f4f4"; +} -.fa-leanpub { - --fa: "\f212"; } +.fa-keybase { + --fa: "\f4f5"; +} -.fa-black-tie { - --fa: "\f27e"; } +.fa-mastodon { + --fa: "\f4f6"; +} -.fa-themeco { - --fa: "\f5c6"; } +.fa-r-project { + --fa: "\f4f7"; +} -.fa-python { - --fa: "\f3e2"; } +.fa-researchgate { + --fa: "\f4f8"; +} -.fa-android { - --fa: "\f17b"; } +.fa-teamspeak { + --fa: "\f4f9"; +} -.fa-bots { - --fa: "\e340"; } +.fa-first-order-alt { + --fa: "\f50a"; +} -.fa-free-code-camp { - --fa: "\f2c5"; } +.fa-fulcrum { + --fa: "\f50b"; +} -.fa-hornbill { - --fa: "\f592"; } +.fa-galactic-republic { + --fa: "\f50c"; +} -.fa-js { - --fa: "\f3b8"; } +.fa-galactic-senate { + --fa: "\f50d"; +} -.fa-ideal { - --fa: "\e013"; } +.fa-jedi-order { + --fa: "\f50e"; +} -.fa-git { - --fa: "\f1d3"; } +.fa-mandalorian { + --fa: "\f50f"; +} -.fa-dev { - --fa: "\f6cc"; } +.fa-old-republic { + --fa: "\f510"; +} -.fa-sketch { - --fa: "\f7c6"; } +.fa-phoenix-squadron { + --fa: "\f511"; +} -.fa-yandex-international { - --fa: "\f414"; } +.fa-sith { + --fa: "\f512"; +} -.fa-cc-amex { - --fa: "\f1f3"; } +.fa-trade-federation { + --fa: "\f513"; +} -.fa-uber { - --fa: "\f402"; } +.fa-wolf-pack-battalion { + --fa: "\f514"; +} -.fa-github { - --fa: "\f09b"; } +.fa-hornbill { + --fa: "\f592"; +} -.fa-php { - --fa: "\f457"; } +.fa-mailchimp { + --fa: "\f59e"; +} -.fa-alipay { - --fa: "\f642"; } +.fa-megaport { + --fa: "\f5a3"; +} -.fa-youtube { - --fa: "\f167"; } +.fa-nimblr { + --fa: "\f5a8"; +} -.fa-skyatlas { - --fa: "\f216"; } +.fa-rev { + --fa: "\f5b2"; +} -.fa-firefox-browser { - --fa: "\e007"; } +.fa-shopware { + --fa: "\f5b5"; +} -.fa-replyd { - --fa: "\f3e6"; } +.fa-squarespace { + --fa: "\f5be"; +} -.fa-suse { - --fa: "\f7d6"; } +.fa-themeco { + --fa: "\f5c6"; +} -.fa-jenkins { - --fa: "\f3b6"; } +.fa-weebly { + --fa: "\f5cc"; +} -.fa-twitter { - --fa: "\f099"; } +.fa-wix { + --fa: "\f5cf"; +} -.fa-rockrms { - --fa: "\f3e9"; } +.fa-ello { + --fa: "\f5f1"; +} -.fa-pinterest { - --fa: "\f0d2"; } +.fa-hackerrank { + --fa: "\f5f7"; +} -.fa-buffer { - --fa: "\f837"; } +.fa-kaggle { + --fa: "\f5fa"; +} -.fa-npm { - --fa: "\f3d4"; } +.fa-markdown { + --fa: "\f60f"; +} -.fa-yammer { - --fa: "\f840"; } +.fa-neos { + --fa: "\f612"; +} -.fa-btc { - --fa: "\f15a"; } +.fa-zhihu { + --fa: "\f63f"; +} -.fa-dribbble { - --fa: "\f17d"; } +.fa-alipay { + --fa: "\f642"; +} -.fa-stumbleupon-circle { - --fa: "\f1a3"; } +.fa-the-red-yeti { + --fa: "\f69d"; +} -.fa-internet-explorer { - --fa: "\f26b"; } +.fa-critical-role { + --fa: "\f6c9"; +} -.fa-stubber { - --fa: "\e5c7"; } +.fa-d-and-d-beyond { + --fa: "\f6ca"; +} -.fa-telegram { - --fa: "\f2c6"; } +.fa-dev { + --fa: "\f6cc"; +} -.fa-telegram-plane { - --fa: "\f2c6"; } +.fa-fantasy-flight-games { + --fa: "\f6dc"; +} -.fa-old-republic { - --fa: "\f510"; } +.fa-wizards-of-the-coast { + --fa: "\f730"; +} -.fa-odysee { - --fa: "\e5c6"; } +.fa-think-peaks { + --fa: "\f731"; +} -.fa-square-whatsapp { - --fa: "\f40c"; } +.fa-reacteurope { + --fa: "\f75d"; +} -.fa-whatsapp-square { - --fa: "\f40c"; } +.fa-artstation { + --fa: "\f77a"; +} -.fa-node-js { - --fa: "\f3d3"; } +.fa-atlassian { + --fa: "\f77b"; +} -.fa-edge-legacy { - --fa: "\e078"; } +.fa-canadian-maple-leaf { + --fa: "\f785"; +} -.fa-slack { - --fa: "\f198"; } +.fa-centos { + --fa: "\f789"; +} -.fa-slack-hash { - --fa: "\f198"; } +.fa-confluence { + --fa: "\f78d"; +} -.fa-medrt { - --fa: "\f3c8"; } +.fa-dhl { + --fa: "\f790"; +} -.fa-usb { - --fa: "\f287"; } +.fa-diaspora { + --fa: "\f791"; +} -.fa-tumblr { - --fa: "\f173"; } +.fa-fedex { + --fa: "\f797"; +} -.fa-vaadin { - --fa: "\f408"; } +.fa-fedora { + --fa: "\f798"; +} -.fa-quora { - --fa: "\f2c4"; } +.fa-figma { + --fa: "\f799"; +} -.fa-square-x-twitter { - --fa: "\e61a"; } +.fa-intercom { + --fa: "\f7af"; +} -.fa-reacteurope { - --fa: "\f75d"; } +.fa-invision { + --fa: "\f7b0"; +} -.fa-medium { - --fa: "\f23a"; } +.fa-jira { + --fa: "\f7b1"; +} -.fa-medium-m { - --fa: "\f23a"; } +.fa-mendeley { + --fa: "\f7b3"; +} -.fa-amilia { - --fa: "\f36d"; } +.fa-raspberry-pi { + --fa: "\f7bb"; +} -.fa-mixcloud { - --fa: "\f289"; } +.fa-redhat { + --fa: "\f7bc"; +} -.fa-flipboard { - --fa: "\f44d"; } +.fa-sketch { + --fa: "\f7c6"; +} -.fa-viacoin { - --fa: "\f237"; } +.fa-sourcetree { + --fa: "\f7d3"; +} -.fa-critical-role { - --fa: "\f6c9"; } +.fa-suse { + --fa: "\f7d6"; +} -.fa-sitrox { - --fa: "\e44a"; } +.fa-ubuntu { + --fa: "\f7df"; +} -.fa-discourse { - --fa: "\f393"; } +.fa-ups { + --fa: "\f7e0"; +} -.fa-joomla { - --fa: "\f1aa"; } +.fa-usps { + --fa: "\f7e1"; +} -.fa-mastodon { - --fa: "\f4f6"; } +.fa-yarn { + --fa: "\f7e3"; +} .fa-airbnb { - --fa: "\f834"; } + --fa: "\f834"; +} -.fa-wolf-pack-battalion { - --fa: "\f514"; } +.fa-battle-net { + --fa: "\f835"; +} -.fa-buy-n-large { - --fa: "\f8a6"; } +.fa-bootstrap { + --fa: "\f836"; +} -.fa-gulp { - --fa: "\f3ae"; } +.fa-buffer { + --fa: "\f837"; +} -.fa-creative-commons-sampling-plus { - --fa: "\f4f1"; } +.fa-chromecast { + --fa: "\f838"; +} -.fa-strava { - --fa: "\f428"; } +.fa-evernote { + --fa: "\f839"; +} -.fa-ember { - --fa: "\f423"; } +.fa-itch-io { + --fa: "\f83a"; +} -.fa-canadian-maple-leaf { - --fa: "\f785"; } +.fa-salesforce { + --fa: "\f83b"; +} -.fa-teamspeak { - --fa: "\f4f9"; } +.fa-speaker-deck { + --fa: "\f83c"; +} -.fa-pushed { - --fa: "\f3e1"; } +.fa-symfony { + --fa: "\f83d"; +} -.fa-wordpress-simple { - --fa: "\f411"; } +.fa-waze { + --fa: "\f83f"; +} -.fa-nutritionix { - --fa: "\f3d6"; } +.fa-yammer { + --fa: "\f840"; +} -.fa-wodu { - --fa: "\e088"; } +.fa-git-alt { + --fa: "\f841"; +} -.fa-google-pay { - --fa: "\e079"; } +.fa-stackpath { + --fa: "\f842"; +} -.fa-intercom { - --fa: "\f7af"; } +.fa-cotton-bureau { + --fa: "\f89e"; +} -.fa-zhihu { - --fa: "\f63f"; } +.fa-buy-n-large { + --fa: "\f8a6"; +} -.fa-korvue { - --fa: "\f42f"; } +.fa-mdb { + --fa: "\f8ca"; +} -.fa-pix { - --fa: "\e43a"; } +.fa-orcid { + --fa: "\f8d2"; +} -.fa-steam-symbol { - --fa: "\f3f6"; } -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-regular: normal 400 1em/1 'Font Awesome 6 Free'; } +.fa-swift { + --fa: "\f8e1"; +} + +.fa-umbraco { + --fa: "\f8e8"; +}:root, :host { + --fa-family-classic: 'Font Awesome 7 Free'; + --fa-font-regular: normal 400 1em/1 var(--fa-family-classic); + /* deprecated: this older custom property will be removed next major release */ + --fa-style-family-classic: var(--fa-family-classic); +} @font-face { - font-family: 'Font Awesome 6 Free'; + font-family: "Font Awesome 7 Free"; font-style: normal; font-weight: 400; font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } + src: url("../webfonts/fa-regular-400.woff2"); +} +.far { + --fa-family: var(--fa-family-classic); + --fa-style: 400; +} + +.fa-classic { + --fa-family: var(--fa-family-classic); +} -.far, .fa-regular { - font-weight: 400; } -:root, :host { - --fa-style-family-classic: 'Font Awesome 6 Free'; - --fa-font-solid: normal 900 1em/1 'Font Awesome 6 Free'; } + --fa-style: 400; +}:root, :host { + --fa-family-classic: 'Font Awesome 7 Free'; + --fa-font-solid: normal 900 1em/1 var(--fa-family-classic); + /* deprecated: this older custom property will be removed next major release */ + --fa-style-family-classic: var(--fa-family-classic); +} @font-face { - font-family: 'Font Awesome 6 Free'; + font-family: "Font Awesome 7 Free"; font-style: normal; font-weight: 900; font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } + src: url("../webfonts/fa-solid-900.woff2"); +} +.fas { + --fa-family: var(--fa-family-classic); + --fa-style: 900; +} + +.fa-classic { + --fa-family: var(--fa-family-classic); +} -.fas, .fa-solid { - font-weight: 900; } -@font-face { - font-family: 'Font Awesome 5 Brands'; + --fa-style: 900; +}@font-face { + font-family: "Font Awesome 5 Brands"; font-display: block; font-weight: 400; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - + src: url("../webfonts/fa-brands-400.woff2") format("woff2"); +} @font-face { - font-family: 'Font Awesome 5 Free'; + font-family: "Font Awesome 5 Free"; font-display: block; font-weight: 900; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - + src: url("../webfonts/fa-solid-900.woff2") format("woff2"); +} @font-face { - font-family: 'Font Awesome 5 Free'; + font-family: "Font Awesome 5 Free"; font-display: block; font-weight: 400; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); } -@font-face { - font-family: 'FontAwesome'; + src: url("../webfonts/fa-regular-400.woff2") format("woff2"); +}@font-face { + font-family: "FontAwesome"; font-display: block; - src: url("../webfonts/fa-solid-900.woff2") format("woff2"), url("../webfonts/fa-solid-900.ttf") format("truetype"); } - + src: url("../webfonts/fa-solid-900.woff2") format("woff2"); +} @font-face { - font-family: 'FontAwesome'; + font-family: "FontAwesome"; font-display: block; - src: url("../webfonts/fa-brands-400.woff2") format("woff2"), url("../webfonts/fa-brands-400.ttf") format("truetype"); } - + src: url("../webfonts/fa-brands-400.woff2") format("woff2"); +} @font-face { - font-family: 'FontAwesome'; + font-family: "FontAwesome"; font-display: block; - src: url("../webfonts/fa-regular-400.woff2") format("woff2"), url("../webfonts/fa-regular-400.ttf") format("truetype"); - unicode-range: U+F003,U+F006,U+F014,U+F016-F017,U+F01A-F01B,U+F01D,U+F022,U+F03E,U+F044,U+F046,U+F05C-F05D,U+F06E,U+F070,U+F087-F088,U+F08A,U+F094,U+F096-F097,U+F09D,U+F0A0,U+F0A2,U+F0A4-F0A7,U+F0C5,U+F0C7,U+F0E5-F0E6,U+F0EB,U+F0F6-F0F8,U+F10C,U+F114-F115,U+F118-F11A,U+F11C-F11D,U+F133,U+F147,U+F14E,U+F150-F152,U+F185-F186,U+F18E,U+F190-F192,U+F196,U+F1C1-F1C9,U+F1D9,U+F1DB,U+F1E3,U+F1EA,U+F1F7,U+F1F9,U+F20A,U+F247-F248,U+F24A,U+F24D,U+F255-F25B,U+F25D,U+F271-F274,U+F278,U+F27B,U+F28C,U+F28E,U+F29C,U+F2B5,U+F2B7,U+F2BA,U+F2BC,U+F2BE,U+F2C0-F2C1,U+F2C3,U+F2D0,U+F2D2,U+F2D4,U+F2DC; } - + src: url("../webfonts/fa-regular-400.woff2") format("woff2"); + unicode-range: U+F003, U+F006, U+F014, U+F016-F017, U+F01A-F01B, U+F01D, U+F022, U+F03E, U+F044, U+F046, U+F05C-F05D, U+F06E, U+F070, U+F087-F088, U+F08A, U+F094, U+F096-F097, U+F09D, U+F0A0, U+F0A2, U+F0A4-F0A7, U+F0C5, U+F0C7, U+F0E5-F0E6, U+F0EB, U+F0F6-F0F8, U+F10C, U+F114-F115, U+F118-F11A, U+F11C-F11D, U+F133, U+F147, U+F14E, U+F150-F152, U+F185-F186, U+F18E, U+F190-F192, U+F196, U+F1C1-F1C9, U+F1D9, U+F1DB, U+F1E3, U+F1EA, U+F1F7, U+F1F9, U+F20A, U+F247-F248, U+F24A, U+F24D, U+F255-F25B, U+F25D, U+F271-F274, U+F278, U+F27B, U+F28C, U+F28E, U+F29C, U+F2B5, U+F2B7, U+F2BA, U+F2BC, U+F2BE, U+F2C0-F2C1, U+F2C3, U+F2D0, U+F2D2, U+F2D4, U+F2DC; +} @font-face { - font-family: 'FontAwesome'; + font-family: "FontAwesome"; font-display: block; - src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"), url("../webfonts/fa-v4compatibility.ttf") format("truetype"); - unicode-range: U+F041,U+F047,U+F065-F066,U+F07D-F07E,U+F080,U+F08B,U+F08E,U+F090,U+F09A,U+F0AC,U+F0AE,U+F0B2,U+F0D0,U+F0D6,U+F0E4,U+F0EC,U+F10A-F10B,U+F123,U+F13E,U+F148-F149,U+F14C,U+F156,U+F15E,U+F160-F161,U+F163,U+F175-F178,U+F195,U+F1F8,U+F219,U+F27A; } + src: url("../webfonts/fa-v4compatibility.woff2") format("woff2"); + unicode-range: U+F041, U+F047, U+F065-F066, U+F07D-F07E, U+F080, U+F08B, U+F08E, U+F090, U+F09A, U+F0AC, U+F0AE, U+F0B2, U+F0D0, U+F0D6, U+F0E4, U+F0EC, U+F10A-F10B, U+F123, U+F13E, U+F148-F149, U+F14C, U+F156, U+F15E, U+F160-F161, U+F163, U+F175-F178, U+F195, U+F1F8, U+F219, U+F27A; +} \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css index 7ed4af7d2..be593bc9f 100644 --- a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css +++ b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/css/v4-shims.css @@ -1,2194 +1,2818 @@ /*! - * Font Awesome Free 6.7.2 by @fontawesome - https://fontawesome.com + * Font Awesome Free 7.2.0 by @fontawesome - https://fontawesome.com * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License) - * Copyright 2024 Fonticons, Inc. + * Copyright 2026 Fonticons, Inc. */ .fa.fa-glass { - --fa: "\f000"; } + --fa: "\f000"; +} .fa.fa-envelope-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-envelope-o { - --fa: "\f0e0"; } + --fa: "\f0e0"; +} .fa.fa-star-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-star-o { - --fa: "\f005"; } + --fa: "\f005"; +} .fa.fa-remove { - --fa: "\f00d"; } + --fa: "\f00d"; +} .fa.fa-close { - --fa: "\f00d"; } + --fa: "\f00d"; +} .fa.fa-gear { - --fa: "\f013"; } + --fa: "\f013"; +} .fa.fa-trash-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-trash-o { - --fa: "\f2ed"; } + --fa: "\f2ed"; +} .fa.fa-home { - --fa: "\f015"; } + --fa: "\f015"; +} .fa.fa-file-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-o { - --fa: "\f15b"; } + --fa: "\f15b"; +} .fa.fa-clock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-clock-o { - --fa: "\f017"; } + --fa: "\f017"; +} .fa.fa-arrow-circle-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-arrow-circle-o-down { - --fa: "\f358"; } + --fa: "\f358"; +} .fa.fa-arrow-circle-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-arrow-circle-o-up { - --fa: "\f35b"; } + --fa: "\f35b"; +} .fa.fa-play-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-play-circle-o { - --fa: "\f144"; } + --fa: "\f144"; +} .fa.fa-repeat { - --fa: "\f01e"; } + --fa: "\f01e"; +} .fa.fa-rotate-right { - --fa: "\f01e"; } + --fa: "\f01e"; +} .fa.fa-refresh { - --fa: "\f021"; } + --fa: "\f021"; +} .fa.fa-list-alt { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-list-alt { - --fa: "\f022"; } + --fa: "\f022"; +} .fa.fa-dedent { - --fa: "\f03b"; } + --fa: "\f03b"; +} .fa.fa-video-camera { - --fa: "\f03d"; } + --fa: "\f03d"; +} .fa.fa-picture-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-picture-o { - --fa: "\f03e"; } + --fa: "\f03e"; +} .fa.fa-photo { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-photo { - --fa: "\f03e"; } + --fa: "\f03e"; +} .fa.fa-image { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-image { - --fa: "\f03e"; } + --fa: "\f03e"; +} .fa.fa-map-marker { - --fa: "\f3c5"; } + --fa: "\f3c5"; +} .fa.fa-pencil-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-pencil-square-o { - --fa: "\f044"; } + --fa: "\f044"; +} .fa.fa-edit { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-edit { - --fa: "\f044"; } + --fa: "\f044"; +} .fa.fa-share-square-o { - --fa: "\f14d"; } + --fa: "\f14d"; +} .fa.fa-check-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-check-square-o { - --fa: "\f14a"; } + --fa: "\f14a"; +} .fa.fa-arrows { - --fa: "\f0b2"; } + --fa: "\f0b2"; +} .fa.fa-times-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-times-circle-o { - --fa: "\f057"; } + --fa: "\f057"; +} .fa.fa-check-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-check-circle-o { - --fa: "\f058"; } + --fa: "\f058"; +} .fa.fa-mail-forward { - --fa: "\f064"; } + --fa: "\f064"; +} .fa.fa-expand { - --fa: "\f424"; } + --fa: "\f424"; +} .fa.fa-compress { - --fa: "\f422"; } + --fa: "\f422"; +} .fa.fa-eye { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-eye-slash { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-warning { - --fa: "\f071"; } + --fa: "\f071"; +} .fa.fa-calendar { - --fa: "\f073"; } + --fa: "\f073"; +} .fa.fa-arrows-v { - --fa: "\f338"; } + --fa: "\f338"; +} .fa.fa-arrows-h { - --fa: "\f337"; } + --fa: "\f337"; +} .fa.fa-bar-chart { - --fa: "\e0e3"; } + --fa: "\e0e3"; +} .fa.fa-bar-chart-o { - --fa: "\e0e3"; } + --fa: "\e0e3"; +} .fa.fa-twitter-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-twitter-square { - --fa: "\f081"; } + --fa: "\f081"; +} .fa.fa-facebook-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-facebook-square { - --fa: "\f082"; } + --fa: "\f082"; +} .fa.fa-gears { - --fa: "\f085"; } + --fa: "\f085"; +} .fa.fa-thumbs-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-thumbs-o-up { - --fa: "\f164"; } + --fa: "\f164"; +} .fa.fa-thumbs-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-thumbs-o-down { - --fa: "\f165"; } + --fa: "\f165"; +} .fa.fa-heart-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-heart-o { - --fa: "\f004"; } + --fa: "\f004"; +} .fa.fa-sign-out { - --fa: "\f2f5"; } + --fa: "\f2f5"; +} .fa.fa-linkedin-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-linkedin-square { - --fa: "\f08c"; } + --fa: "\f08c"; +} .fa.fa-thumb-tack { - --fa: "\f08d"; } + --fa: "\f08d"; +} .fa.fa-external-link { - --fa: "\f35d"; } + --fa: "\f35d"; +} .fa.fa-sign-in { - --fa: "\f2f6"; } + --fa: "\f2f6"; +} .fa.fa-github-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-github-square { - --fa: "\f092"; } + --fa: "\f092"; +} .fa.fa-lemon-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-lemon-o { - --fa: "\f094"; } + --fa: "\f094"; +} .fa.fa-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-square-o { - --fa: "\f0c8"; } + --fa: "\f0c8"; +} .fa.fa-bookmark-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-bookmark-o { - --fa: "\f02e"; } + --fa: "\f02e"; +} .fa.fa-twitter { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-facebook { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-facebook { - --fa: "\f39e"; } + --fa: "\f39e"; +} .fa.fa-facebook-f { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-facebook-f { - --fa: "\f39e"; } + --fa: "\f39e"; +} .fa.fa-github { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-credit-card { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-feed { - --fa: "\f09e"; } + --fa: "\f09e"; +} .fa.fa-hdd-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hdd-o { - --fa: "\f0a0"; } + --fa: "\f0a0"; +} .fa.fa-hand-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-o-right { - --fa: "\f0a4"; } + --fa: "\f0a4"; +} .fa.fa-hand-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-o-left { - --fa: "\f0a5"; } + --fa: "\f0a5"; +} .fa.fa-hand-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-o-up { - --fa: "\f0a6"; } + --fa: "\f0a6"; +} .fa.fa-hand-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-o-down { - --fa: "\f0a7"; } + --fa: "\f0a7"; +} .fa.fa-globe { - --fa: "\f57d"; } + --fa: "\f57d"; +} .fa.fa-tasks { - --fa: "\f828"; } + --fa: "\f828"; +} .fa.fa-arrows-alt { - --fa: "\f31e"; } + --fa: "\f31e"; +} .fa.fa-group { - --fa: "\f0c0"; } + --fa: "\f0c0"; +} .fa.fa-chain { - --fa: "\f0c1"; } + --fa: "\f0c1"; +} .fa.fa-cut { - --fa: "\f0c4"; } + --fa: "\f0c4"; +} .fa.fa-files-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-files-o { - --fa: "\f0c5"; } + --fa: "\f0c5"; +} .fa.fa-floppy-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-floppy-o { - --fa: "\f0c7"; } + --fa: "\f0c7"; +} .fa.fa-save { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-save { - --fa: "\f0c7"; } + --fa: "\f0c7"; +} .fa.fa-navicon { - --fa: "\f0c9"; } + --fa: "\f0c9"; +} .fa.fa-reorder { - --fa: "\f0c9"; } + --fa: "\f0c9"; +} .fa.fa-magic { - --fa: "\e2ca"; } + --fa: "\e2ca"; +} .fa.fa-pinterest { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pinterest-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pinterest-square { - --fa: "\f0d3"; } + --fa: "\f0d3"; +} .fa.fa-google-plus-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-plus-square { - --fa: "\f0d4"; } + --fa: "\f0d4"; +} .fa.fa-google-plus { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-plus { - --fa: "\f0d5"; } + --fa: "\f0d5"; +} .fa.fa-money { - --fa: "\f3d1"; } + --fa: "\f3d1"; +} .fa.fa-unsorted { - --fa: "\f0dc"; } + --fa: "\f0dc"; +} .fa.fa-sort-desc { - --fa: "\f0dd"; } + --fa: "\f0dd"; +} .fa.fa-sort-asc { - --fa: "\f0de"; } + --fa: "\f0de"; +} .fa.fa-linkedin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-linkedin { - --fa: "\f0e1"; } + --fa: "\f0e1"; +} .fa.fa-rotate-left { - --fa: "\f0e2"; } + --fa: "\f0e2"; +} .fa.fa-legal { - --fa: "\f0e3"; } + --fa: "\f0e3"; +} .fa.fa-tachometer { - --fa: "\f625"; } + --fa: "\f625"; +} .fa.fa-dashboard { - --fa: "\f625"; } + --fa: "\f625"; +} .fa.fa-comment-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-comment-o { - --fa: "\f075"; } + --fa: "\f075"; +} .fa.fa-comments-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-comments-o { - --fa: "\f086"; } + --fa: "\f086"; +} .fa.fa-flash { - --fa: "\f0e7"; } + --fa: "\f0e7"; +} .fa.fa-clipboard { - --fa: "\f0ea"; } + --fa: "\f0ea"; +} .fa.fa-lightbulb-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-lightbulb-o { - --fa: "\f0eb"; } + --fa: "\f0eb"; +} .fa.fa-exchange { - --fa: "\f362"; } + --fa: "\f362"; +} .fa.fa-cloud-download { - --fa: "\f0ed"; } + --fa: "\f0ed"; +} .fa.fa-cloud-upload { - --fa: "\f0ee"; } + --fa: "\f0ee"; +} .fa.fa-bell-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-bell-o { - --fa: "\f0f3"; } + --fa: "\f0f3"; +} .fa.fa-cutlery { - --fa: "\f2e7"; } + --fa: "\f2e7"; +} .fa.fa-file-text-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-text-o { - --fa: "\f15c"; } + --fa: "\f15c"; +} .fa.fa-building-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-building-o { - --fa: "\f1ad"; } + --fa: "\f1ad"; +} .fa.fa-hospital-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hospital-o { - --fa: "\f0f8"; } + --fa: "\f0f8"; +} .fa.fa-tablet { - --fa: "\f3fa"; } + --fa: "\f3fa"; +} .fa.fa-mobile { - --fa: "\f3cd"; } + --fa: "\f3cd"; +} .fa.fa-mobile-phone { - --fa: "\f3cd"; } + --fa: "\f3cd"; +} .fa.fa-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-circle-o { - --fa: "\f111"; } + --fa: "\f111"; +} .fa.fa-mail-reply { - --fa: "\f3e5"; } + --fa: "\f3e5"; +} .fa.fa-github-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-folder-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-folder-o { - --fa: "\f07b"; } + --fa: "\f07b"; +} .fa.fa-folder-open-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-folder-open-o { - --fa: "\f07c"; } + --fa: "\f07c"; +} .fa.fa-smile-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-smile-o { - --fa: "\f118"; } + --fa: "\f118"; +} .fa.fa-frown-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-frown-o { - --fa: "\f119"; } + --fa: "\f119"; +} .fa.fa-meh-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-meh-o { - --fa: "\f11a"; } + --fa: "\f11a"; +} .fa.fa-keyboard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-keyboard-o { - --fa: "\f11c"; } + --fa: "\f11c"; +} .fa.fa-flag-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-flag-o { - --fa: "\f024"; } + --fa: "\f024"; +} .fa.fa-mail-reply-all { - --fa: "\f122"; } + --fa: "\f122"; +} .fa.fa-star-half-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-star-half-o { - --fa: "\f5c0"; } + --fa: "\f5c0"; +} .fa.fa-star-half-empty { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-star-half-empty { - --fa: "\f5c0"; } + --fa: "\f5c0"; +} .fa.fa-star-half-full { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-star-half-full { - --fa: "\f5c0"; } + --fa: "\f5c0"; +} .fa.fa-code-fork { - --fa: "\f126"; } + --fa: "\f126"; +} .fa.fa-chain-broken { - --fa: "\f127"; } + --fa: "\f127"; +} .fa.fa-unlink { - --fa: "\f127"; } + --fa: "\f127"; +} .fa.fa-calendar-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-calendar-o { - --fa: "\f133"; } + --fa: "\f133"; +} .fa.fa-maxcdn { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-html5 { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-css3 { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-unlock-alt { - --fa: "\f09c"; } + --fa: "\f09c"; +} .fa.fa-minus-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-minus-square-o { - --fa: "\f146"; } + --fa: "\f146"; +} .fa.fa-level-up { - --fa: "\f3bf"; } + --fa: "\f3bf"; +} .fa.fa-level-down { - --fa: "\f3be"; } + --fa: "\f3be"; +} .fa.fa-pencil-square { - --fa: "\f14b"; } + --fa: "\f14b"; +} .fa.fa-external-link-square { - --fa: "\f360"; } + --fa: "\f360"; +} .fa.fa-compass { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-caret-square-o-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-caret-square-o-down { - --fa: "\f150"; } + --fa: "\f150"; +} .fa.fa-toggle-down { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-toggle-down { - --fa: "\f150"; } + --fa: "\f150"; +} .fa.fa-caret-square-o-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-caret-square-o-up { - --fa: "\f151"; } + --fa: "\f151"; +} .fa.fa-toggle-up { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-toggle-up { - --fa: "\f151"; } + --fa: "\f151"; +} .fa.fa-caret-square-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-caret-square-o-right { - --fa: "\f152"; } + --fa: "\f152"; +} .fa.fa-toggle-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-toggle-right { - --fa: "\f152"; } + --fa: "\f152"; +} .fa.fa-eur { - --fa: "\f153"; } + --fa: "\f153"; +} .fa.fa-euro { - --fa: "\f153"; } + --fa: "\f153"; +} .fa.fa-gbp { - --fa: "\f154"; } + --fa: "\f154"; +} .fa.fa-usd { - --fa: "\24"; } + --fa: "\$"; +} .fa.fa-dollar { - --fa: "\24"; } + --fa: "\$"; +} .fa.fa-inr { - --fa: "\e1bc"; } + --fa: "\e1bc"; +} .fa.fa-rupee { - --fa: "\e1bc"; } + --fa: "\e1bc"; +} .fa.fa-jpy { - --fa: "\f157"; } + --fa: "\f157"; +} .fa.fa-cny { - --fa: "\f157"; } + --fa: "\f157"; +} .fa.fa-rmb { - --fa: "\f157"; } + --fa: "\f157"; +} .fa.fa-yen { - --fa: "\f157"; } + --fa: "\f157"; +} .fa.fa-rub { - --fa: "\f158"; } + --fa: "\f158"; +} .fa.fa-ruble { - --fa: "\f158"; } + --fa: "\f158"; +} .fa.fa-rouble { - --fa: "\f158"; } + --fa: "\f158"; +} .fa.fa-krw { - --fa: "\f159"; } + --fa: "\f159"; +} .fa.fa-won { - --fa: "\f159"; } + --fa: "\f159"; +} .fa.fa-btc { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bitcoin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bitcoin { - --fa: "\f15a"; } + --fa: "\f15a"; +} .fa.fa-file-text { - --fa: "\f15c"; } + --fa: "\f15c"; +} .fa.fa-sort-alpha-asc { - --fa: "\f15d"; } + --fa: "\f15d"; +} .fa.fa-sort-alpha-desc { - --fa: "\f881"; } + --fa: "\f881"; +} .fa.fa-sort-amount-asc { - --fa: "\f884"; } + --fa: "\f884"; +} .fa.fa-sort-amount-desc { - --fa: "\f160"; } + --fa: "\f160"; +} .fa.fa-sort-numeric-asc { - --fa: "\f162"; } + --fa: "\f162"; +} .fa.fa-sort-numeric-desc { - --fa: "\f886"; } + --fa: "\f886"; +} .fa.fa-youtube-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-youtube-square { - --fa: "\f431"; } + --fa: "\f431"; +} .fa.fa-youtube { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-xing { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-xing-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-xing-square { - --fa: "\f169"; } + --fa: "\f169"; +} .fa.fa-youtube-play { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-youtube-play { - --fa: "\f167"; } + --fa: "\f167"; +} .fa.fa-dropbox { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-stack-overflow { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-instagram { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-flickr { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-adn { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bitbucket { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bitbucket-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bitbucket-square { - --fa: "\f171"; } + --fa: "\f171"; +} .fa.fa-tumblr { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-tumblr-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-tumblr-square { - --fa: "\f174"; } + --fa: "\f174"; +} .fa.fa-long-arrow-down { - --fa: "\f309"; } + --fa: "\f309"; +} .fa.fa-long-arrow-up { - --fa: "\f30c"; } + --fa: "\f30c"; +} .fa.fa-long-arrow-left { - --fa: "\f30a"; } + --fa: "\f30a"; +} .fa.fa-long-arrow-right { - --fa: "\f30b"; } + --fa: "\f30b"; +} .fa.fa-apple { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-windows { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-android { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-linux { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-dribbble { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-skype { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-foursquare { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-trello { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gratipay { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gittip { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gittip { - --fa: "\f184"; } + --fa: "\f184"; +} .fa.fa-sun-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-sun-o { - --fa: "\f185"; } + --fa: "\f185"; +} .fa.fa-moon-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-moon-o { - --fa: "\f186"; } + --fa: "\f186"; +} .fa.fa-vk { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-weibo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-renren { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pagelines { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-stack-exchange { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-arrow-circle-o-right { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-arrow-circle-o-right { - --fa: "\f35a"; } + --fa: "\f35a"; +} .fa.fa-arrow-circle-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-arrow-circle-o-left { - --fa: "\f359"; } + --fa: "\f359"; +} .fa.fa-caret-square-o-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-caret-square-o-left { - --fa: "\f191"; } + --fa: "\f191"; +} .fa.fa-toggle-left { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-toggle-left { - --fa: "\f191"; } + --fa: "\f191"; +} .fa.fa-dot-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-dot-circle-o { - --fa: "\f192"; } + --fa: "\f192"; +} .fa.fa-vimeo-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-vimeo-square { - --fa: "\f194"; } + --fa: "\f194"; +} .fa.fa-try { - --fa: "\e2bb"; } + --fa: "\e2bb"; +} .fa.fa-turkish-lira { - --fa: "\e2bb"; } + --fa: "\e2bb"; +} .fa.fa-plus-square-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-plus-square-o { - --fa: "\f0fe"; } + --fa: "\f0fe"; +} .fa.fa-slack { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wordpress { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-openid { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-institution { - --fa: "\f19c"; } + --fa: "\f19c"; +} .fa.fa-bank { - --fa: "\f19c"; } + --fa: "\f19c"; +} .fa.fa-mortar-board { - --fa: "\f19d"; } + --fa: "\f19d"; +} .fa.fa-yahoo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-reddit { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-reddit-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-reddit-square { - --fa: "\f1a2"; } + --fa: "\f1a2"; +} .fa.fa-stumbleupon-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-stumbleupon { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-delicious { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-digg { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pied-piper-pp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pied-piper-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-drupal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-joomla { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-behance { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-behance-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-behance-square { - --fa: "\f1b5"; } + --fa: "\f1b5"; +} .fa.fa-steam { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-steam-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-steam-square { - --fa: "\f1b7"; } + --fa: "\f1b7"; +} .fa.fa-automobile { - --fa: "\f1b9"; } + --fa: "\f1b9"; +} .fa.fa-cab { - --fa: "\f1ba"; } + --fa: "\f1ba"; +} .fa.fa-spotify { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-deviantart { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-soundcloud { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-file-pdf-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-pdf-o { - --fa: "\f1c1"; } + --fa: "\f1c1"; +} .fa.fa-file-word-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-word-o { - --fa: "\f1c2"; } + --fa: "\f1c2"; +} .fa.fa-file-excel-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-excel-o { - --fa: "\f1c3"; } + --fa: "\f1c3"; +} .fa.fa-file-powerpoint-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-powerpoint-o { - --fa: "\f1c4"; } + --fa: "\f1c4"; +} .fa.fa-file-image-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-image-o { - --fa: "\f1c5"; } + --fa: "\f1c5"; +} .fa.fa-file-photo-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-photo-o { - --fa: "\f1c5"; } + --fa: "\f1c5"; +} .fa.fa-file-picture-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-picture-o { - --fa: "\f1c5"; } + --fa: "\f1c5"; +} .fa.fa-file-archive-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-archive-o { - --fa: "\f1c6"; } + --fa: "\f1c6"; +} .fa.fa-file-zip-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-zip-o { - --fa: "\f1c6"; } + --fa: "\f1c6"; +} .fa.fa-file-audio-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-audio-o { - --fa: "\f1c7"; } + --fa: "\f1c7"; +} .fa.fa-file-sound-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-sound-o { - --fa: "\f1c7"; } + --fa: "\f1c7"; +} .fa.fa-file-video-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-video-o { - --fa: "\f1c8"; } + --fa: "\f1c8"; +} .fa.fa-file-movie-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-movie-o { - --fa: "\f1c8"; } + --fa: "\f1c8"; +} .fa.fa-file-code-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-file-code-o { - --fa: "\f1c9"; } + --fa: "\f1c9"; +} .fa.fa-vine { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-codepen { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-jsfiddle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-life-bouy { - --fa: "\f1cd"; } + --fa: "\f1cd"; +} .fa.fa-life-buoy { - --fa: "\f1cd"; } + --fa: "\f1cd"; +} .fa.fa-life-saver { - --fa: "\f1cd"; } + --fa: "\f1cd"; +} .fa.fa-support { - --fa: "\f1cd"; } + --fa: "\f1cd"; +} .fa.fa-circle-o-notch { - --fa: "\f1ce"; } + --fa: "\f1ce"; +} .fa.fa-rebel { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-ra { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-ra { - --fa: "\f1d0"; } + --fa: "\f1d0"; +} .fa.fa-resistance { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-resistance { - --fa: "\f1d0"; } + --fa: "\f1d0"; +} .fa.fa-empire { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-ge { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-ge { - --fa: "\f1d1"; } + --fa: "\f1d1"; +} .fa.fa-git-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-git-square { - --fa: "\f1d2"; } + --fa: "\f1d2"; +} .fa.fa-git { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-hacker-news { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-y-combinator-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-y-combinator-square { - --fa: "\f1d4"; } + --fa: "\f1d4"; +} .fa.fa-yc-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-yc-square { - --fa: "\f1d4"; } + --fa: "\f1d4"; +} .fa.fa-tencent-weibo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-qq { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-weixin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wechat { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wechat { - --fa: "\f1d7"; } + --fa: "\f1d7"; +} .fa.fa-send { - --fa: "\f1d8"; } + --fa: "\f1d8"; +} .fa.fa-paper-plane-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-paper-plane-o { - --fa: "\f1d8"; } + --fa: "\f1d8"; +} .fa.fa-send-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-send-o { - --fa: "\f1d8"; } + --fa: "\f1d8"; +} .fa.fa-circle-thin { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-circle-thin { - --fa: "\f111"; } + --fa: "\f111"; +} .fa.fa-header { - --fa: "\f1dc"; } + --fa: "\f1dc"; +} .fa.fa-futbol-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-futbol-o { - --fa: "\f1e3"; } + --fa: "\f1e3"; +} .fa.fa-soccer-ball-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-soccer-ball-o { - --fa: "\f1e3"; } + --fa: "\f1e3"; +} .fa.fa-slideshare { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-twitch { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-yelp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-newspaper-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-newspaper-o { - --fa: "\f1ea"; } + --fa: "\f1ea"; +} .fa.fa-paypal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-wallet { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-visa { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-mastercard { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-discover { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-amex { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-paypal { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-stripe { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bell-slash-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-bell-slash-o { - --fa: "\f1f6"; } + --fa: "\f1f6"; +} .fa.fa-trash { - --fa: "\f2ed"; } + --fa: "\f2ed"; +} .fa.fa-copyright { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-eyedropper { - --fa: "\f1fb"; } + --fa: "\f1fb"; +} .fa.fa-area-chart { - --fa: "\f1fe"; } + --fa: "\f1fe"; +} .fa.fa-pie-chart { - --fa: "\f200"; } + --fa: "\f200"; +} .fa.fa-line-chart { - --fa: "\f201"; } + --fa: "\f201"; +} .fa.fa-lastfm { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-lastfm-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-lastfm-square { - --fa: "\f203"; } + --fa: "\f203"; +} .fa.fa-ioxhost { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-angellist { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-cc { - --fa: "\f20a"; } + --fa: "\f20a"; +} .fa.fa-ils { - --fa: "\f20b"; } + --fa: "\f20b"; +} .fa.fa-shekel { - --fa: "\f20b"; } + --fa: "\f20b"; +} .fa.fa-sheqel { - --fa: "\f20b"; } + --fa: "\f20b"; +} .fa.fa-buysellads { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-connectdevelop { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-dashcube { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-forumbee { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-leanpub { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-sellsy { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-shirtsinbulk { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-simplybuilt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-skyatlas { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-diamond { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-diamond { - --fa: "\f3a5"; } + --fa: "\f3a5"; +} .fa.fa-transgender { - --fa: "\f224"; } + --fa: "\f224"; +} .fa.fa-intersex { - --fa: "\f224"; } + --fa: "\f224"; +} .fa.fa-transgender-alt { - --fa: "\f225"; } + --fa: "\f225"; +} .fa.fa-facebook-official { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-facebook-official { - --fa: "\f09a"; } + --fa: "\f09a"; +} .fa.fa-pinterest-p { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-whatsapp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-hotel { - --fa: "\f236"; } + --fa: "\f236"; +} .fa.fa-viacoin { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-medium { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-y-combinator { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-yc { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-yc { - --fa: "\f23b"; } + --fa: "\f23b"; +} .fa.fa-optin-monster { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-opencart { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-expeditedssl { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-battery-4 { - --fa: "\f240"; } + --fa: "\f240"; +} .fa.fa-battery { - --fa: "\f240"; } + --fa: "\f240"; +} .fa.fa-battery-3 { - --fa: "\f241"; } + --fa: "\f241"; +} .fa.fa-battery-2 { - --fa: "\f242"; } + --fa: "\f242"; +} .fa.fa-battery-1 { - --fa: "\f243"; } + --fa: "\f243"; +} .fa.fa-battery-0 { - --fa: "\f244"; } + --fa: "\f244"; +} .fa.fa-object-group { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-object-ungroup { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-sticky-note-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-sticky-note-o { - --fa: "\f249"; } + --fa: "\f249"; +} .fa.fa-cc-jcb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-cc-diners-club { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-clone { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hourglass-o { - --fa: "\f254"; } + --fa: "\f254"; +} .fa.fa-hourglass-1 { - --fa: "\f251"; } + --fa: "\f251"; +} .fa.fa-hourglass-2 { - --fa: "\f252"; } + --fa: "\f252"; +} .fa.fa-hourglass-3 { - --fa: "\f253"; } + --fa: "\f253"; +} .fa.fa-hand-rock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-rock-o { - --fa: "\f255"; } + --fa: "\f255"; +} .fa.fa-hand-grab-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-grab-o { - --fa: "\f255"; } + --fa: "\f255"; +} .fa.fa-hand-paper-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-paper-o { - --fa: "\f256"; } + --fa: "\f256"; +} .fa.fa-hand-stop-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-stop-o { - --fa: "\f256"; } + --fa: "\f256"; +} .fa.fa-hand-scissors-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-scissors-o { - --fa: "\f257"; } + --fa: "\f257"; +} .fa.fa-hand-lizard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-lizard-o { - --fa: "\f258"; } + --fa: "\f258"; +} .fa.fa-hand-spock-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-spock-o { - --fa: "\f259"; } + --fa: "\f259"; +} .fa.fa-hand-pointer-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-pointer-o { - --fa: "\f25a"; } + --fa: "\f25a"; +} .fa.fa-hand-peace-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-hand-peace-o { - --fa: "\f25b"; } + --fa: "\f25b"; +} .fa.fa-registered { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-creative-commons { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gg { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gg-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-odnoklassniki { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-odnoklassniki-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-odnoklassniki-square { - --fa: "\f264"; } + --fa: "\f264"; +} .fa.fa-get-pocket { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wikipedia-w { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-safari { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-chrome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-firefox { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-opera { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-internet-explorer { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-television { - --fa: "\f26c"; } + --fa: "\f26c"; +} .fa.fa-contao { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-500px { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-amazon { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-calendar-plus-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-calendar-plus-o { - --fa: "\f271"; } + --fa: "\f271"; +} .fa.fa-calendar-minus-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-calendar-minus-o { - --fa: "\f272"; } + --fa: "\f272"; +} .fa.fa-calendar-times-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-calendar-times-o { - --fa: "\f273"; } + --fa: "\f273"; +} .fa.fa-calendar-check-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-calendar-check-o { - --fa: "\f274"; } + --fa: "\f274"; +} .fa.fa-map-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-map-o { - --fa: "\f279"; } + --fa: "\f279"; +} .fa.fa-commenting { - --fa: "\f4ad"; } + --fa: "\f4ad"; +} .fa.fa-commenting-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-commenting-o { - --fa: "\f4ad"; } + --fa: "\f4ad"; +} .fa.fa-houzz { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-vimeo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-vimeo { - --fa: "\f27d"; } + --fa: "\f27d"; +} .fa.fa-black-tie { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-fonticons { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-reddit-alien { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-edge { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-credit-card-alt { - --fa: "\f09d"; } + --fa: "\f09d"; +} .fa.fa-codiepie { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-modx { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-fort-awesome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-usb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-product-hunt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-mixcloud { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-scribd { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-pause-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-pause-circle-o { - --fa: "\f28b"; } + --fa: "\f28b"; +} .fa.fa-stop-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-stop-circle-o { - --fa: "\f28d"; } + --fa: "\f28d"; +} .fa.fa-bluetooth { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-bluetooth-b { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-gitlab { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wpbeginner { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wpforms { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-envira { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wheelchair-alt { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wheelchair-alt { - --fa: "\f368"; } + --fa: "\f368"; +} .fa.fa-question-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-question-circle-o { - --fa: "\f059"; } + --fa: "\f059"; +} .fa.fa-volume-control-phone { - --fa: "\f2a0"; } + --fa: "\f2a0"; +} .fa.fa-asl-interpreting { - --fa: "\f2a3"; } + --fa: "\f2a3"; +} .fa.fa-deafness { - --fa: "\f2a4"; } + --fa: "\f2a4"; +} .fa.fa-hard-of-hearing { - --fa: "\f2a4"; } + --fa: "\f2a4"; +} .fa.fa-glide { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-glide-g { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-signing { - --fa: "\f2a7"; } + --fa: "\f2a7"; +} .fa.fa-viadeo { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-viadeo-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-viadeo-square { - --fa: "\f2aa"; } + --fa: "\f2aa"; +} .fa.fa-snapchat { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-snapchat-ghost { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-snapchat-ghost { - --fa: "\f2ab"; } + --fa: "\f2ab"; +} .fa.fa-snapchat-square { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-snapchat-square { - --fa: "\f2ad"; } + --fa: "\f2ad"; +} .fa.fa-pied-piper { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-first-order { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-yoast { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-themeisle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-plus-official { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-plus-official { - --fa: "\f2b3"; } + --fa: "\f2b3"; +} .fa.fa-google-plus-circle { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-google-plus-circle { - --fa: "\f2b3"; } + --fa: "\f2b3"; +} .fa.fa-font-awesome { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-fa { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-fa { - --fa: "\f2b4"; } + --fa: "\f2b4"; +} .fa.fa-handshake-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-handshake-o { - --fa: "\f2b5"; } + --fa: "\f2b5"; +} .fa.fa-envelope-open-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-envelope-open-o { - --fa: "\f2b6"; } + --fa: "\f2b6"; +} .fa.fa-linode { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-address-book-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-address-book-o { - --fa: "\f2b9"; } + --fa: "\f2b9"; +} .fa.fa-vcard { - --fa: "\f2bb"; } + --fa: "\f2bb"; +} .fa.fa-address-card-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-address-card-o { - --fa: "\f2bb"; } + --fa: "\f2bb"; +} .fa.fa-vcard-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-vcard-o { - --fa: "\f2bb"; } + --fa: "\f2bb"; +} .fa.fa-user-circle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-user-circle-o { - --fa: "\f2bd"; } + --fa: "\f2bd"; +} .fa.fa-user-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-user-o { - --fa: "\f007"; } + --fa: "\f007"; +} .fa.fa-id-badge { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-drivers-license { - --fa: "\f2c2"; } + --fa: "\f2c2"; +} .fa.fa-id-card-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-id-card-o { - --fa: "\f2c2"; } + --fa: "\f2c2"; +} .fa.fa-drivers-license-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-drivers-license-o { - --fa: "\f2c2"; } + --fa: "\f2c2"; +} .fa.fa-quora { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-free-code-camp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-telegram { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-thermometer-4 { - --fa: "\f2c7"; } + --fa: "\f2c7"; +} .fa.fa-thermometer { - --fa: "\f2c7"; } + --fa: "\f2c7"; +} .fa.fa-thermometer-3 { - --fa: "\f2c8"; } + --fa: "\f2c8"; +} .fa.fa-thermometer-2 { - --fa: "\f2c9"; } + --fa: "\f2c9"; +} .fa.fa-thermometer-1 { - --fa: "\f2ca"; } + --fa: "\f2ca"; +} .fa.fa-thermometer-0 { - --fa: "\f2cb"; } + --fa: "\f2cb"; +} .fa.fa-bathtub { - --fa: "\f2cd"; } + --fa: "\f2cd"; +} .fa.fa-s15 { - --fa: "\f2cd"; } + --fa: "\f2cd"; +} .fa.fa-window-maximize { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-window-restore { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-times-rectangle { - --fa: "\f410"; } + --fa: "\f410"; +} .fa.fa-window-close-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-window-close-o { - --fa: "\f410"; } + --fa: "\f410"; +} .fa.fa-times-rectangle-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-times-rectangle-o { - --fa: "\f410"; } + --fa: "\f410"; +} .fa.fa-bandcamp { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-grav { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-etsy { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-imdb { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-ravelry { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-eercast { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-eercast { - --fa: "\f2da"; } + --fa: "\f2da"; +} .fa.fa-snowflake-o { - font-family: 'Font Awesome 6 Free'; - font-weight: 400; } + font-family: "Font Awesome 7 Free"; + font-weight: 400; +} .fa.fa-snowflake-o { - --fa: "\f2dc"; } + --fa: "\f2dc"; +} .fa.fa-superpowers { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-wpexplorer { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} .fa.fa-meetup { - font-family: 'Font Awesome 6 Brands'; - font-weight: 400; } + font-family: "Font Awesome 7 Brands"; + font-weight: 400; +} \ No newline at end of file diff --git a/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf b/aspnet-core/services/LY.MicroService.AuthServer/wwwroot/libs/@fortawesome/fontawesome-free/webfonts/fa-brands-400.ttf deleted file mode 100644 index 0f82a8360517d2c8b7d16e85434d40c6fb735954..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 210792 zcmd4437DKkwfJ52_P%#d?>$>j_ssN6W+s`Qt&@;t2#F*RAj-ZdK}3-?YLLhx!zSp} zOHdY3#Hh&iDk>r>D(YNCL`CI#@# z-rDQbsZ*y;oqD6RQYxq>luH$lJAT>FnLA!}sZzR!(5+`*c-FQrw;XjC3H(YW-~74@ z-tyYDH*9`hscyG&_NC4}=d9QCeY$WDY3~Kb&LzNog8NAP&j6k0UbuaS_XvN0@@`bh zKXJjuXP@PKwdFpgS|@nF?!vQnY;!ibUrs#btKvmxU3kuCKKJZZ%GI1x%H6u{;x}#o z$nVQrl&gKYQn{sywz_;C^@Gb!*>PrU)jkz+$fnevypyM;$D=0Toq0I5-#!Mi`;SQ zlyC#{bB=AtyeWTT{x8%Oc5Hsfzw!FJ)Z0wi zj;U+Xv_rzAY%k!Kbk5aEoB9bSZlSM@JSL6JBlr)>`%8h8Ys%h3yg)r2n3;AG=QioaP1ynBZ1}c%U8YW3hl!&e(l<5A zYoy1G>EG1bK)uxCC(N{W!5vpV^0h6h?_i @@Z|Lo2o%N8V+8O&i2d+$8BHR07ve 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 z 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 z

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