Browse Source

CmsKit: Global features domain

pull/11705/head
Yunus Emre Kalkan 4 years ago
parent
commit
eab7bcd9a7
  1. 3
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalCmsKitFeatures.cs
  2. 16
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalFeatures/GlobalResourcesFeature.cs
  3. 12
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalResources/GlobalResourceConsts.cs
  4. 40
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs
  5. 41
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResourceManager.cs
  6. 12
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/IGlobalResourceRepository.cs
  7. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
  8. 19
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  9. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
  10. 2
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
  11. 24
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/GlobalResources/EfCoreGlobalResourceRepository.cs
  12. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
  13. 6
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs
  14. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
  15. 25
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/GlobalResources/MongoGlobalResourceRepository.cs
  16. 3
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs

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

@ -25,6 +25,8 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures
public MenuFeature Menu => GetFeature<MenuFeature>();
public GlobalResourcesFeature GlobalResources => GetFeature<GlobalResourcesFeature>();
public GlobalCmsKitFeatures([NotNull] GlobalFeatureManager featureManager)
: base(featureManager)
{
@ -37,5 +39,6 @@ public class GlobalCmsKitFeatures : GlobalModuleFeatures
AddFeature(new BlogsFeature(this));
AddFeature(new CmsUserFeature(this));
AddFeature(new MenuFeature(this));
AddFeature(new GlobalResourcesFeature(this));
}
}

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

@ -0,0 +1,16 @@
using JetBrains.Annotations;
using Volo.Abp.GlobalFeatures;
namespace Volo.CmsKit.GlobalFeatures;
[GlobalFeatureName(Name)]
public class GlobalResourcesFeature : GlobalFeature
{
public const string Name = "CmsKit.GlobalResources";
internal GlobalResourcesFeature(
[NotNull] GlobalCmsKitFeatures cmsKit
) : base(cmsKit)
{
}
}

12
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/GlobalResources/GlobalResourceConsts.cs

@ -0,0 +1,12 @@
namespace Volo.CmsKit.GlobalResources;
public class GlobalResourceConsts
{
public const string GlobalStyleName = "GlobalStyle";
public const string GlobalScriptName = "GlobalScripit";
public static int MaxNameLength { get; set; } = 128;
public static int MaxValueLength { get; set; } = int.MaxValue;
}

40
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResource.cs

@ -0,0 +1,40 @@
using System;
using JetBrains.Annotations;
using Volo.Abp;
using Volo.Abp.Domain.Entities.Auditing;
using Volo.Abp.MultiTenancy;
namespace Volo.CmsKit.GlobalResources;
public class GlobalResource : AuditedAggregateRoot<Guid>, IMultiTenant
{
public virtual string Name { get; }
public virtual string Value { get; private set; }
public virtual Guid? TenantId { get; protected set; }
protected GlobalResource()
{
}
internal GlobalResource(
Guid id,
[NotNull] string name,
[CanBeNull] string value,
Guid? tenantId = null) : base(id)
{
Name = Check.NotNullOrEmpty(name, nameof(name), GlobalResourceConsts.MaxNameLength);
Value = Check.Length(value, nameof(value), GlobalResourceConsts.MaxValueLength);
TenantId = tenantId;
}
public virtual void SetValue(string value)
{
Check.Length(value, nameof(value), GlobalResourceConsts.MaxValueLength);
Value = value;
}
}

41
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/GlobalResourceManager.cs

@ -0,0 +1,41 @@
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Services;
namespace Volo.CmsKit.GlobalResources;
public class GlobalResourceManager : DomainService
{
private readonly IGlobalResourceRepository _globalResourceRepository;
public GlobalResourceManager(IGlobalResourceRepository globalResourceRepository)
{
_globalResourceRepository = globalResourceRepository;
}
public virtual async Task<GlobalResource> SetGlobalStyleAsync(string value)
{
return await SetGlobalResourceAsync(GlobalResourceConsts.GlobalStyleName, value);
}
public virtual async Task<GlobalResource> SetGlobalScriptAsync(string value)
{
return await SetGlobalResourceAsync(GlobalResourceConsts.GlobalScriptName, value);
}
protected virtual async Task<GlobalResource> SetGlobalResourceAsync(string name, string value)
{
var resource = await _globalResourceRepository.FindByName(name);
if (resource == null)
{
return await _globalResourceRepository.InsertAsync(
new GlobalResource(GuidGenerator.Create(), name, value, CurrentTenant.Id)
);
}
resource.SetValue(value);
return await _globalResourceRepository.UpdateAsync(resource);
}
}

12
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/GlobalResources/IGlobalResourceRepository.cs

@ -0,0 +1,12 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using JetBrains.Annotations;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.GlobalResources;
public interface IGlobalResourceRepository: IBasicRepository<GlobalResource, Guid>
{
Task<GlobalResource> FindByName([NotNull] string name, CancellationToken cancellationToken = default);
}

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

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -28,6 +29,7 @@ public class CmsKitDbContext : AbpDbContext<CmsKitDbContext>, ICmsKitDbContext
public DbSet<BlogFeature> BlogFeatures { get; set; }
public DbSet<MediaDescriptor> MediaDescriptors { get; set; }
public DbSet<MenuItem> MenuItems { get; set; }
public DbSet<GlobalResource> GlobalResources { get; set; }
public CmsKitDbContext(DbContextOptions<CmsKitDbContext> options)
: base(options)

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

@ -6,6 +6,7 @@ using Volo.Abp.Users.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalFeatures;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -264,6 +265,24 @@ public static class CmsKitDbContextModelCreatingExtensions
builder.Ignore<MenuItem>();
}
if (GlobalFeatureManager.Instance.IsEnabled<GlobalResourcesFeature>())
{
builder.Entity<GlobalResource>(b =>
{
b.ToTable(CmsKitDbProperties.DbTablePrefix + "GlobalResources", CmsKitDbProperties.DbSchema);
b.ConfigureByConvention();
b.Property(x => x.Name).IsRequired().HasMaxLength(GlobalResourceConsts.MaxNameLength);
b.Property(x => x.Value).IsRequired().HasMaxLength(GlobalResourceConsts.MaxValueLength);
});
}
else
{
builder.Ignore<GlobalResource>();
}
builder.TryConfigureObjectExtensions<CmsKitDbContext>();
}
}

2
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs

@ -4,6 +4,7 @@ using Volo.Abp.Modularity;
using Volo.Abp.Users.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Pages;
using Volo.CmsKit.Ratings;
@ -35,6 +36,7 @@ public class CmsKitEntityFrameworkCoreModule : AbpModule
options.AddRepository<BlogPost, EfCoreBlogPostRepository>();
options.AddRepository<BlogFeature, EfCoreBlogFeatureRepository>();
options.AddRepository<MediaDescriptor, EfCoreMediaDescriptorRepository>();
options.AddRepository<GlobalResource, EfCoreGlobalResourceRepository>();
});
}
}

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

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -27,4 +28,5 @@ public interface ICmsKitDbContext : IEfCoreDbContext
DbSet<BlogPost> BlogPosts { get; }
DbSet<MediaDescriptor> MediaDescriptors { get; }
DbSet<MenuItem> MenuItems { get; }
DbSet<GlobalResource> GlobalResources { get; }
}

24
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/GlobalResources/EfCoreGlobalResourceRepository.cs

@ -0,0 +1,24 @@
using System;
using System.Threading;
using System.Threading.Tasks;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.GlobalResources;
public class EfCoreGlobalResourceRepository: EfCoreRepository<ICmsKitDbContext, GlobalResource, Guid>, IGlobalResourceRepository
{
public EfCoreGlobalResourceRepository(IDbContextProvider<ICmsKitDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<GlobalResource> FindByName(string name,
CancellationToken cancellationToken = default)
{
Check.NotNullOrEmpty(name, nameof(name));
return FindAsync(x => x.Name == name, cancellationToken: GetCancellationToken(cancellationToken));
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -41,6 +42,8 @@ public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext
public IMongoCollection<MenuItem> MenuItems => Collection<MenuItem>();
public IMongoCollection<GlobalResource> GlobalResources => Collection<GlobalResource>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
base.CreateModel(modelBuilder);

6
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs

@ -2,6 +2,7 @@
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -78,5 +79,10 @@ public static class CmsKitMongoDbContextExtensions
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "MenuItems";
});
builder.Entity<GlobalResource>(x =>
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "GlobalResources";
});
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs

@ -4,10 +4,12 @@ using Volo.Abp.MongoDB;
using Volo.Abp.Users.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.MongoDB.Blogs;
using Volo.CmsKit.MongoDB.Comments;
using Volo.CmsKit.MongoDB.GlobalResources;
using Volo.CmsKit.MongoDB.MediaDescriptors;
using Volo.CmsKit.MongoDB.Menus;
using Volo.CmsKit.MongoDB.Pages;
@ -45,6 +47,7 @@ public class CmsKitMongoDbModule : AbpModule
options.AddRepository<BlogPost, MongoBlogPostRepository>();
options.AddRepository<MediaDescriptor, MongoMediaDescriptorRepository>();
options.AddRepository<MenuItem, MongoMenuItemRepository>();
options.AddRepository<GlobalResource, MongoGlobalResourceRepository>();
});
}
}

25
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/GlobalResources/MongoGlobalResourceRepository.cs

@ -0,0 +1,25 @@
using System;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.GlobalResources;
namespace Volo.CmsKit.MongoDB.GlobalResources;
public class MongoGlobalResourceRepository: MongoDbRepository<ICmsKitMongoDbContext, GlobalResource, Guid>, IGlobalResourceRepository
{
public MongoGlobalResourceRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<GlobalResource> FindByName(string name,
CancellationToken cancellationToken = default)
{
Check.NotNullOrEmpty(name, nameof(name));
return FindAsync(x => x.Name == name, cancellationToken: GetCancellationToken(cancellationToken));
}
}

3
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs

@ -3,6 +3,7 @@ using Volo.Abp.Data;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Comments;
using Volo.CmsKit.GlobalResources;
using Volo.CmsKit.MediaDescriptors;
using Volo.CmsKit.Menus;
using Volo.CmsKit.Pages;
@ -40,4 +41,6 @@ public interface ICmsKitMongoDbContext : IAbpMongoDbContext
IMongoCollection<MediaDescriptor> MediaDescriptors { get; }
IMongoCollection<MenuItem> MenuItems { get; }
IMongoCollection<GlobalResource> GlobalResources { get; }
}

Loading…
Cancel
Save