Browse Source

Added "features" to the CMS kit and implemented on the EF Core layer.

pull/5062/head
Halil İbrahim Kalkan 6 years ago
parent
commit
1b3b596eb0
  1. 10
      modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs
  2. 4
      modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj
  3. 7
      modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs
  4. 2
      modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs
  5. 9
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs
  6. 2
      modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs
  7. 4
      modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs
  8. 5
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs
  9. 2
      modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs
  10. 56
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitFeatures.cs
  11. 42
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures.cs
  12. 3
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs
  13. 9
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
  14. 48
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  15. 11
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
  16. 11
      modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs
  17. 9
      modules/cms-kit/test/Volo.CmsKit.Application.Tests/Reactions/ReactionPublicAppService_Tests.cs
  18. 2
      modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Reactions/ReactionManager_Tests.cs
  19. 2
      modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs

10
modules/cms-kit/host/Volo.CmsKit.Host.Shared/FeatureConfigurer.cs

@ -0,0 +1,10 @@
namespace Volo.CmsKit
{
public static class FeatureConfigurer
{
public static void Configure()
{
CmsKitFeatures.EnableAll();
}
}
}

4
modules/cms-kit/host/Volo.CmsKit.Host.Shared/Volo.CmsKit.Host.Shared.csproj

@ -7,4 +7,8 @@
<RootNamespace>Volo.CmsKit</RootNamespace>
</PropertyGroup>
<ItemGroup>
<ProjectReference Include="..\..\src\Volo.CmsKit.Domain.Shared\Volo.CmsKit.Domain.Shared.csproj" />
</ItemGroup>
</Project>

7
modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/CmsKitHttpApiHostModule.cs

@ -52,6 +52,11 @@ namespace Volo.CmsKit
{
private const string DefaultCorsPolicyName = "Default";
public override void PreConfigureServices(ServiceConfigurationContext context)
{
FeatureConfigurer.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
@ -163,7 +168,7 @@ namespace Volo.CmsKit
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
app.UseAbpClaimsMap();
if (MultiTenancyConsts.IsEnabled)

2
modules/cms-kit/host/Volo.CmsKit.HttpApi.Host/EntityFrameworkCore/CmsKitHttpApiHostMigrationsDbContextFactory.cs

@ -9,6 +9,8 @@ namespace Volo.CmsKit.EntityFrameworkCore
{
public CmsKitHttpApiHostMigrationsDbContext CreateDbContext(string[] args)
{
FeatureConfigurer.Configure();
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<CmsKitHttpApiHostMigrationsDbContext>()

9
modules/cms-kit/host/Volo.CmsKit.IdentityServer/CmsKitIdentityServerModule.cs

@ -77,6 +77,11 @@ namespace Volo.CmsKit
{
private const string DefaultCorsPolicyName = "Default";
public override void PreConfigureServices(ServiceConfigurationContext context)
{
FeatureConfigurer.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();
@ -182,10 +187,10 @@ namespace Volo.CmsKit
app.UseCorrelationId();
app.UseVirtualFiles();
app.UseRouting();
app.UseCors(DefaultCorsPolicyName);
app.UseCors(DefaultCorsPolicyName);
app.UseAuthentication();
app.UseJwtTokenMiddleware();
if (MultiTenancyConsts.IsEnabled)
{
app.UseMultiTenancy();

2
modules/cms-kit/host/Volo.CmsKit.IdentityServer/EntityFrameworkCore/IdentityServerHostMigrationsDbContextFactory.cs

@ -9,6 +9,8 @@ namespace Volo.CmsKit.EntityFrameworkCore
{
public IdentityServerHostMigrationsDbContext CreateDbContext(string[] args)
{
FeatureConfigurer.Configure();
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<IdentityServerHostMigrationsDbContext>()

4
modules/cms-kit/host/Volo.CmsKit.Web.Host/CmsKitWebHostModule.cs

@ -65,6 +65,8 @@ namespace Volo.CmsKit
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
FeatureConfigurer.Configure();
context.Services.PreConfigure<AbpMvcDataAnnotationsLocalizationOptions>(options =>
{
options.AddAssemblyResource(
@ -222,7 +224,7 @@ namespace Volo.CmsKit
app.UseHttpsRedirection();
app.UseVirtualFiles();
app.UseRouting();
app.UseAuthentication();
app.UseAuthentication();
if (MultiTenancyConsts.IsEnabled)
{

5
modules/cms-kit/host/Volo.CmsKit.Web.Unified/CmsKitWebUnifiedModule.cs

@ -63,6 +63,11 @@ namespace Volo.CmsKit
)]
public class CmsKitWebUnifiedModule : AbpModule
{
public override void PreConfigureServices(ServiceConfigurationContext context)
{
FeatureConfigurer.Configure();
}
public override void ConfigureServices(ServiceConfigurationContext context)
{
var hostingEnvironment = context.Services.GetHostingEnvironment();

2
modules/cms-kit/host/Volo.CmsKit.Web.Unified/EntityFrameworkCore/UnifiedDbContextFactory.cs

@ -9,6 +9,8 @@ namespace Volo.CmsKit.EntityFrameworkCore
{
public UnifiedDbContext CreateDbContext(string[] args)
{
FeatureConfigurer.Configure();
var configuration = BuildConfiguration();
var builder = new DbContextOptionsBuilder<UnifiedDbContext>()

56
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/CmsKitFeatures.cs

@ -0,0 +1,56 @@
using System.Collections.Generic;
namespace Volo.CmsKit
{
public static class CmsKitFeatures
{
public const string NamePrefix = "CmsKit";
public static class Reactions
{
public const string Name = NamePrefix + ".Reactions";
public static bool IsEnabled
{
get => GlobalFeatures.IsEnabled(Name);
set => GlobalFeatures.SetEnabled(Name, value);
}
}
public static class Comments
{
public const string Name = NamePrefix + ".Comments";
public static bool IsEnabled
{
get => GlobalFeatures.IsEnabled(Name);
set => GlobalFeatures.SetEnabled(Name, value);
}
}
public static void EnableAll()
{
foreach (var featureName in GetAllNames())
{
GlobalFeatures.Enable(featureName);
}
}
public static void DisableAll()
{
foreach (var featureName in GetAllNames())
{
GlobalFeatures.Disable(featureName);
}
}
public static IEnumerable<string> GetAllNames()
{
return new[]
{
Reactions.Name,
Comments.Name
};
}
}
}

42
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures.cs

@ -0,0 +1,42 @@
using System.Collections.Generic;
using System.Linq;
namespace Volo.CmsKit
{
internal static class GlobalFeatures //TODO: Move to the ABP Framework..?
{
private static readonly HashSet<string> EnabledFeatures = new HashSet<string>();
public static bool IsEnabled(string featureName)
{
return EnabledFeatures.Contains(featureName);
}
public static void SetEnabled(string featureName, bool isEnabled)
{
if (isEnabled)
{
Enable(featureName);
}
else
{
Disable(featureName);
}
}
public static void Enable(string featureName)
{
EnabledFeatures.AddIfNotContains(featureName);
}
public static void Disable(string featureName)
{
EnabledFeatures.Remove(featureName);
}
public static IEnumerable<string> GetEnabledFeatures()
{
return EnabledFeatures;
}
}
}

3
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Comments/EfCoreCommentRepository.cs

@ -8,6 +8,7 @@ using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.Comments
{
@ -27,7 +28,7 @@ namespace Volo.CmsKit.Comments
Check.NotNullOrWhiteSpace(entityId, nameof(entityId));
var query = from comment in DbSet
join user in DbContext.CmsUsers on comment.CreatorId equals user.Id
join user in DbContext.Set<CmsUser>() on comment.CreatorId equals user.Id
where entityType == comment.EntityType && entityId == comment.EntityId
orderby comment.CreationTime
select new CommentWithAuthorQueryResultItem

9
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs

@ -1,21 +1,12 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public class CmsKitDbContext : AbpDbContext<CmsKitDbContext>, ICmsKitDbContext
{
public DbSet<UserReaction> UserReactions { get; set; }
public DbSet<Comment> Comments { get; set; }
public DbSet<CmsUser> CmsUsers { get; set; }
public CmsKitDbContext(DbContextOptions<CmsKitDbContext> options)
: base(options)
{

48
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs

@ -32,34 +32,40 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.ConfigureAbpUser();
});
builder.Entity<UserReaction>(b =>
if (CmsKitFeatures.Reactions.IsEnabled)
{
b.ToTable(options.TablePrefix + "UserReactions", options.Schema);
b.ConfigureByConvention();
builder.Entity<UserReaction>(b =>
{
b.ToTable(options.TablePrefix + "UserReactions", options.Schema);
b.ConfigureByConvention();
b.Property(x => x.EntityType).IsRequired().HasMaxLength(UserReactionConsts.MaxEntityTypeLength);
b.Property(x => x.EntityId).IsRequired().HasMaxLength(UserReactionConsts.MaxEntityIdLength);
b.Property(x => x.ReactionName).IsRequired().HasMaxLength(UserReactionConsts.MaxReactionNameLength);
b.Property(x => x.CreationTime);
b.Property(x => x.EntityType).IsRequired().HasMaxLength(UserReactionConsts.MaxEntityTypeLength);
b.Property(x => x.EntityId).IsRequired().HasMaxLength(UserReactionConsts.MaxEntityIdLength);
b.Property(x => x.ReactionName).IsRequired().HasMaxLength(UserReactionConsts.MaxReactionNameLength);
b.Property(x => x.CreationTime);
b.HasIndex(x => new { x.EntityType, x.EntityId });
b.HasIndex(x => new { x.CreatorId, x.EntityType, x.EntityId, x.ReactionName });
});
b.HasIndex(x => new { x.EntityType, x.EntityId });
b.HasIndex(x => new { x.CreatorId, x.EntityType, x.EntityId, x.ReactionName });
});
}
builder.Entity<Comment>(b =>
if (CmsKitFeatures.Comments.IsEnabled)
{
b.ToTable(options.TablePrefix + "Comments", options.Schema);
b.ConfigureByConvention();
builder.Entity<Comment>(b =>
{
b.ToTable(options.TablePrefix + "Comments", options.Schema);
b.ConfigureByConvention();
b.Property(x => x.EntityType).IsRequired().HasMaxLength(CommentConsts.MaxEntityTypeLength);
b.Property(x => x.EntityId).IsRequired().HasMaxLength(CommentConsts.MaxEntityIdLength);
b.Property(x => x.Text).IsRequired().HasMaxLength(CommentConsts.MaxTextLength);
b.Property(x => x.RepliedCommentId);
b.Property(x => x.CreationTime);
b.Property(x => x.EntityType).IsRequired().HasMaxLength(CommentConsts.MaxEntityTypeLength);
b.Property(x => x.EntityId).IsRequired().HasMaxLength(CommentConsts.MaxEntityIdLength);
b.Property(x => x.Text).IsRequired().HasMaxLength(CommentConsts.MaxTextLength);
b.Property(x => x.RepliedCommentId);
b.Property(x => x.CreationTime);
b.HasIndex(x => new { x.EntityType, x.EntityId });
b.HasIndex(x => new { x.RepliedCommentId });
});
b.HasIndex(x => new { x.EntityType, x.EntityId });
b.HasIndex(x => new { x.RepliedCommentId });
});
}
}
}
}

11
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs

@ -1,19 +1,10 @@
using Microsoft.EntityFrameworkCore;
using Volo.Abp.Data;
using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public interface ICmsKitDbContext : IEfCoreDbContext
{
DbSet<UserReaction> UserReactions { get; }
DbSet<Comment> Comments { get; }
DbSet<CmsUser> CmsUsers { get; set; }
}
}

11
modules/cms-kit/test/Volo.CmsKit.Application.Tests/Comments/CommentPublicAppService_Tests.cs

@ -1,11 +1,8 @@
using System;
using System.Linq;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.EntityFrameworkCore;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
using Shouldly;
using Volo.Abp.MultiTenancy;
using Volo.Abp.Users;
using Volo.CmsKit.Public.Comments;
using Xunit;
@ -54,7 +51,7 @@ namespace Volo.CmsKit.Comments
UsingDbContext(context =>
{
var comments = context.Comments.Where(x =>
var comments = context.Set<Comment>().Where(x =>
x.EntityId == _cmsKitTestData.EntityId1 && x.EntityType == _cmsKitTestData.EntityType1).ToList();
comments
@ -75,7 +72,7 @@ namespace Volo.CmsKit.Comments
UsingDbContext(context =>
{
var comment = context.Comments.Single(x =>
var comment = context.Set<Comment>().Single(x =>
x.Id == _cmsKitTestData.CommentWithChildId);
comment.Text.ShouldBe("I'm Updated");
@ -91,7 +88,7 @@ namespace Volo.CmsKit.Comments
UsingDbContext(context =>
{
var comment = context.Comments.FirstOrDefault(x =>
var comment = context.Set<Comment>().FirstOrDefault(x =>
x.Id == _cmsKitTestData.CommentWithChildId);
comment.ShouldBeNull();

9
modules/cms-kit/test/Volo.CmsKit.Application.Tests/Reactions/ReactionPublicAppService_Tests.cs

@ -1,7 +1,4 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.Extensions.DependencyInjection;
using NSubstitute;
@ -69,7 +66,7 @@ namespace Volo.CmsKit.Reactions
UsingDbContext(context =>
{
var reaction = context.UserReactions.FirstOrDefault(x =>
var reaction = context.Set<UserReaction>().FirstOrDefault(x =>
x.CreatorId == _cmsKitTestData.User1Id &&
x.ReactionName == StandardReactions.Hooray &&
x.EntityId == _cmsKitTestData.EntityId2 &&
@ -93,7 +90,7 @@ namespace Volo.CmsKit.Reactions
UsingDbContext(context =>
{
var reaction = context.UserReactions.FirstOrDefault(x =>
var reaction = context.Set<UserReaction>().FirstOrDefault(x =>
x.CreatorId == _cmsKitTestData.User1Id &&
x.ReactionName == StandardReactions.Confused &&
x.EntityId == _cmsKitTestData.EntityId1 &&

2
modules/cms-kit/test/Volo.CmsKit.Domain.Tests/Reactions/ReactionManager_Tests.cs

@ -69,7 +69,7 @@ namespace Volo.CmsKit.Reactions
UsingDbContext(context =>
{
var reaction = context.UserReactions.FirstOrDefault(x =>
var reaction = context.Set<UserReaction>().FirstOrDefault(x =>
x.CreatorId == _cmsKitTestData.User1Id &&
x.ReactionName == StandardReactions.Confused &&
x.EntityId == _cmsKitTestData.EntityId1 &&

2
modules/cms-kit/test/Volo.CmsKit.TestBase/CmsKitTestBaseModule.cs

@ -18,6 +18,8 @@ namespace Volo.CmsKit
{
public override void ConfigureServices(ServiceConfigurationContext context)
{
CmsKitFeatures.EnableAll();
context.Services.AddAlwaysAllowAuthorization();
}

Loading…
Cancel
Save