diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs index f4f746a61d..0ab0ae4d6d 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs @@ -10,34 +10,24 @@ using Volo.Abp.Account.Web; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Basic; using Volo.Abp.AspNetCore.Mvc.UI.Theme.Shared; using Volo.Abp.AspNetCore.Serilog; -using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.Autofac; -using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; using Volo.Abp.Data; -using Volo.Abp.EntityFrameworkCore; -using Volo.Abp.EntityFrameworkCore.SqlServer; using Volo.Abp.FeatureManagement; -using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity; -using Volo.Abp.Identity.EntityFrameworkCore; using Volo.Abp.Identity.Web; using Volo.Abp.Localization; using Volo.Abp.Modularity; using Volo.Abp.MultiTenancy; using Volo.Abp.PermissionManagement; -using Volo.Abp.PermissionManagement.EntityFrameworkCore; using Volo.Abp.PermissionManagement.HttpApi; using Volo.Abp.PermissionManagement.Identity; -using Volo.Abp.SettingManagement.EntityFrameworkCore; using Volo.Abp.Swashbuckle; using Volo.Abp.TenantManagement; -using Volo.Abp.TenantManagement.EntityFrameworkCore; using Volo.Abp.TenantManagement.Web; using Volo.Abp.Threading; using Volo.Abp.VirtualFileSystem; using Volo.CmsKit.Admin.Web; using Volo.CmsKit.Comments; -using Volo.CmsKit.EntityFrameworkCore; using Volo.CmsKit.MediaDescriptors; using Volo.CmsKit.MultiTenancy; using Volo.CmsKit.Public.Web; @@ -47,39 +37,73 @@ using Volo.CmsKit.Tags; using Volo.CmsKit.Web; using Volo.CmsKit.Web.Contents; +#if EntityFrameworkCore +using Volo.Abp.SettingManagement.EntityFrameworkCore; +using Volo.Abp.TenantManagement.EntityFrameworkCore; +using Volo.Abp.Identity.EntityFrameworkCore; +using Volo.Abp.PermissionManagement.EntityFrameworkCore; +using Volo.Abp.FeatureManagement.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore; +using Volo.Abp.EntityFrameworkCore.SqlServer; +using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; +using Volo.CmsKit.EntityFrameworkCore; +using Volo.Abp.AuditLogging.EntityFrameworkCore; +#elif MongoDB +using Volo.Abp.SettingManagement.MongoDB; +using Volo.Abp.TenantManagement.MongoDB; +using Volo.Abp.Identity.MongoDB; +using Volo.Abp.PermissionManagement.MongoDB; +using Volo.Abp.FeatureManagement.MongoDB; +using Volo.Abp.MongoDB; +using Volo.Abp.BlobStoring.Database.MongoDB; +using Volo.Abp.AuditLogging.MongoDB; +using Volo.CmsKit.MongoDB; +#endif + namespace Volo.CmsKit; [DependsOn( typeof(CmsKitWebModule), typeof(CmsKitApplicationModule), typeof(CmsKitHttpApiModule), +#if EntityFrameworkCore typeof(CmsKitEntityFrameworkCoreModule), typeof(AbpAuditLoggingEntityFrameworkCoreModule), + typeof(AbpEntityFrameworkCoreSqlServerModule), + typeof(AbpSettingManagementEntityFrameworkCoreModule), + typeof(AbpPermissionManagementEntityFrameworkCoreModule), + typeof(AbpIdentityEntityFrameworkCoreModule), + typeof(AbpFeatureManagementEntityFrameworkCoreModule), + typeof(AbpTenantManagementEntityFrameworkCoreModule), + typeof(BlobStoringDatabaseEntityFrameworkCoreModule), +#elif MongoDB + typeof(CmsKitMongoDbModule), + typeof(AbpAuditLoggingMongoDbModule), + typeof(AbpSettingManagementMongoDbModule), + typeof(AbpPermissionManagementMongoDbModule), + typeof(AbpIdentityMongoDbModule), + typeof(AbpFeatureManagementMongoDbModule), + typeof(AbpTenantManagementMongoDbModule), + typeof(BlobStoringDatabaseMongoDbModule), +#endif typeof(AbpAutofacModule), typeof(AbpAccountWebModule), typeof(AbpAccountApplicationModule), typeof(AbpAccountHttpApiModule), - typeof(AbpEntityFrameworkCoreSqlServerModule), - typeof(AbpSettingManagementEntityFrameworkCoreModule), - typeof(AbpPermissionManagementEntityFrameworkCoreModule), typeof(AbpPermissionManagementApplicationModule), typeof(AbpPermissionManagementHttpApiModule), typeof(AbpIdentityWebModule), typeof(AbpIdentityApplicationModule), typeof(AbpIdentityHttpApiModule), - typeof(AbpIdentityEntityFrameworkCoreModule), typeof(AbpPermissionManagementDomainIdentityModule), typeof(AbpFeatureManagementApplicationModule), typeof(AbpFeatureManagementHttpApiModule), - typeof(AbpFeatureManagementEntityFrameworkCoreModule), typeof(AbpFeatureManagementWebModule), typeof(AbpTenantManagementWebModule), typeof(AbpTenantManagementApplicationModule), typeof(AbpTenantManagementHttpApiModule), - typeof(AbpTenantManagementEntityFrameworkCoreModule), typeof(AbpAspNetCoreMvcUiBasicThemeModule), typeof(AbpAspNetCoreSerilogModule), - typeof(BlobStoringDatabaseEntityFrameworkCoreModule), typeof(AbpSwashbuckleModule) )] public class CmsKitWebUnifiedModule : AbpModule @@ -95,10 +119,13 @@ public class CmsKitWebUnifiedModule : AbpModule ConfigureCmsKit(); +#if EntityFrameworkCore + context.Services.AddDbContext(); Configure(options => { options.UseSqlServer(); }); +#endif if (hostingEnvironment.IsDevelopment()) { diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs index 9109a772ed..9770d8ea1c 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContext.cs @@ -1,6 +1,8 @@ -using Microsoft.EntityFrameworkCore; +#if EntityFrameworkCore +using Microsoft.EntityFrameworkCore; using Volo.Abp.AuditLogging.EntityFrameworkCore; using Volo.Abp.BlobStoring.Database.EntityFrameworkCore; +using Volo.Abp.Data; using Volo.Abp.EntityFrameworkCore; using Volo.Abp.FeatureManagement.EntityFrameworkCore; using Volo.Abp.Identity.EntityFrameworkCore; @@ -32,3 +34,4 @@ public class UnifiedDbContext : AbpDbContext modelBuilder.ConfigureBlobStoring(); } } +#endif diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs index 156a6f8ba9..481351e453 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs @@ -1,4 +1,5 @@ -using System.IO; +#if EntityFrameworkCore +using System.IO; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Design; using Microsoft.Extensions.Configuration; @@ -28,3 +29,4 @@ public class UnifiedDbContextFactory : IDesignTimeDbContextFactory Host.CreateDefaultBuilder(args) + .AddAppSettingsSecretsJson() +#if MongoDB + .ConfigureAppConfiguration(options => + { + options.AddJsonFile("appsettings.MongoDB.json"); + }) +#endif .ConfigureWebHostDefaults(webBuilder => { webBuilder.UseStartup(); diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj index 45aa6da55d..8ad50d3b05 100644 --- a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/Volo.CmsKit.Web.Unified.csproj @@ -1,54 +1,72 @@ - + net7.0 Volo.CmsKit true Volo.CmsKit-c2d31439-b723-48e2-b061-5ebd7aeb6010 + $(DefineConstants);MongoDB - - - - - - - - - - + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.MongoDB.json b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.MongoDB.json new file mode 100644 index 0000000000..73fc167f65 --- /dev/null +++ b/modules/cms-kit/host/Volo.CmsKit.Web.Unified/appsettings.MongoDB.json @@ -0,0 +1,5 @@ +{ + "ConnectionStrings": { + "Default": "mongodb://localhost:27017/CmsKit_Unified" + } +} \ No newline at end of file diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs index 785ce2ec73..d3ae31926b 100644 --- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs +++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogPostRepository.cs @@ -53,14 +53,10 @@ public class MongoBlogPostRepository : MongoDbRepository entityIdFilters = null; - if (tagId.HasValue) - { - entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken); - } + var entityIdFilters = await GetEntityIdsByTagId(tagId, cancellationToken); return await (await GetMongoQueryableAsync(cancellationToken)) - .WhereIf>(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString())) + .WhereIf>(entityIdFilters.Any(), x => entityIdFilters.Contains(x.Id)) .WhereIf>(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf>(blogId.HasValue, x => x.BlogId == blogId) .WhereIf>(authorId.HasValue, x => x.AuthorId == authorId) @@ -83,16 +79,12 @@ public class MongoBlogPostRepository : MongoDbRepository entityIdFilters = null; - if (tagId.HasValue) - { - entityIdFilters = await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken); - } - + var entityIdFilters = await GetEntityIdsByTagId(tagId, cancellationToken); + var usersQueryable = dbContext.Collection().AsQueryable(); var queryable = blogPostQueryable - .WhereIf(entityIdFilters != null, x => entityIdFilters.Contains(x.Id.ToString())) + .WhereIf(entityIdFilters.Any(), x => entityIdFilters.Contains(x.Id)) .WhereIf(blogId.HasValue, x => x.BlogId == blogId) .WhereIf(!string.IsNullOrWhiteSpace(filter), x => x.Title.Contains(filter) || x.Slug.Contains(filter)) .WhereIf(authorId.HasValue, x => x.AuthorId == authorId) @@ -118,6 +110,28 @@ public class MongoBlogPostRepository : MongoDbRepository> GetEntityIdsByTagId(Guid? tagId, CancellationToken cancellationToken) + { + var entityIdFilters = new List(); + if (!tagId.HasValue) + { + return entityIdFilters; + } + + var entityIds = + await _entityTagManager.GetEntityIdsFilteredByTagAsync(tagId.Value, CurrentTenant.Id, cancellationToken); + + foreach (var entityId in entityIds) + { + if (Guid.TryParse(entityId, out var parsedEntityId)) + { + entityIdFilters.Add(parsedEntityId); + } + } + + return entityIdFilters; + } + public virtual async Task SlugExistsAsync(Guid blogId, [NotNull] string slug, CancellationToken cancellationToken = default) {