Browse Source

CmsKit - Add BlogFeature Admin

pull/7745/head
enisn 6 years ago
parent
commit
c7c06c13a3
  1. 11
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogFeatureDto.cs
  2. 15
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogFeatureAdminAppService.cs
  3. 1
      modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs
  4. 46
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs
  5. 2
      modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs
  6. 7
      modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogFeatureConsts.cs
  7. 25
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeature.cs
  8. 17
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeeContributor.cs
  9. 16
      modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs
  10. 30
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs
  11. 1
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
  12. 10
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
  13. 1
      modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
  14. 32
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs
  15. 4
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
  16. 5
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContextExtensions.cs
  17. 2
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs

11
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/BlogFeatureDto.cs

@ -0,0 +1,11 @@
using System.ComponentModel.DataAnnotations;
namespace Volo.CmsKit.Admin.Blogs
{
public class BlogFeatureDto
{
[Required]
public string FeatureName { get; set; }
public bool Enabled { get; set; }
}
}

15
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Admin/Blogs/IBlogFeatureAdminAppService.cs

@ -0,0 +1,15 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
namespace Volo.CmsKit.Admin.Blogs
{
public interface IBlogFeatureAdminAppService
{
Task SetAsync(Guid blogId, BlogFeatureDto dto);
Task<List<BlogFeatureDto>> GetListAsync(Guid blogId);
}
}

1
modules/cms-kit/src/Volo.CmsKit.Admin.Application.Contracts/Volo/CmsKit/Permissions/CmsKitAdminPermissions.cs

@ -36,6 +36,7 @@ namespace Volo.CmsKit.Permissions
public const string Create = Default + ".Create";
public const string Update = Default + ".Update";
public const string Delete = Default + ".Delete";
public const string Features = Default + ".Features";
}
public static class BlogPosts

46
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/Blogs/BlogFeatureAdminAppService.cs

@ -0,0 +1,46 @@
using Microsoft.AspNetCore.Authorization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.CmsKit.Admin.Blogs;
using Volo.CmsKit.Blogs;
using Volo.CmsKit.Permissions;
namespace Volo.CmsKit.Admin.Blogs
{
public class BlogFeatureAdminAppService : CmsKitAdminAppServiceBase, IBlogFeatureAdminAppService
{
protected IBlogFeatureRepository BlogFeatureRepository { get; }
public BlogFeatureAdminAppService(IBlogFeatureRepository blogFeatureRepository)
{
BlogFeatureRepository = blogFeatureRepository;
}
[Authorize(CmsKitAdminPermissions.Blogs.Features)]
public async Task<List<BlogFeatureDto>> GetListAsync(Guid blogId)
{
var list = await BlogFeatureRepository.GetListAsync(blogId);
return ObjectMapper.Map<List<BlogFeature>, List<BlogFeatureDto>>(list);
}
[Authorize(CmsKitAdminPermissions.Blogs.Features)]
public async Task SetAsync(Guid blogId, BlogFeatureDto dto)
{
var existing = await BlogFeatureRepository.FindAsync(blogId, dto.FeatureName);
if (existing == null)
{
var blogFeature = new BlogFeature(blogId, dto.FeatureName, dto.Enabled);
await BlogFeatureRepository.InsertAsync(blogFeature);
}
else
{
existing.Enabled = dto.Enabled;
await BlogFeatureRepository.UpdateAsync(existing);
}
}
}
}

2
modules/cms-kit/src/Volo.CmsKit.Admin.Application/Volo/CmsKit/Admin/CmsKitAdminApplicationAutoMapperProfile.cs

@ -31,6 +31,8 @@ namespace Volo.CmsKit.Admin
CreateMap<Blog, BlogLookupDto>(MemberList.Destination);
CreateMap<BlogFeature, BlogFeatureDto>();
CreateMap<TagEntityTypeDefiniton, TagDefinitionDto>(MemberList.Destination);
CreateMap<MediaDescriptor, MediaDescriptorDto>();

7
modules/cms-kit/src/Volo.CmsKit.Domain.Shared/Volo/CmsKit/Blogs/BlogFeatureConsts.cs

@ -0,0 +1,7 @@
namespace Volo.CmsKit.Blogs
{
public static class BlogFeatureConsts
{
public const int MaxFeatureNameLenth = 64;
}
}

25
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeature.cs

@ -0,0 +1,25 @@
using System;
using Volo.Abp.Domain.Entities.Auditing;
namespace Volo.CmsKit.Blogs
{
public class BlogFeature : FullAuditedAggregateRoot<Guid>
{
protected BlogFeature() // Keep for ORM
{
}
public BlogFeature(Guid blogId, string featureName, bool enabled = true)
{
BlogId = blogId;
FeatureName = featureName;
Enabled = enabled;
}
public Guid BlogId { get; protected set; }
public string FeatureName { get; protected set; }
public bool Enabled { get; set; } = true;
}
}

17
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/BlogFeatureDataSeeContributor.cs

@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Data;
namespace Volo.CmsKit.Blogs
{
public class BlogFeatureDataSeeContributor : IDataSeedContributor
{
public Task SeedAsync(DataSeedContext context)
{
throw new NotImplementedException();
}
}
}

16
modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Blogs/IBlogFeatureRepository.cs

@ -0,0 +1,16 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories;
namespace Volo.CmsKit.Blogs
{
public interface IBlogFeatureRepository : IBasicRepository<BlogFeature, Guid>
{
Task<List<BlogFeature>> GetListAsync(Guid blogId);
Task<BlogFeature> FindAsync(Guid blogId, string featureName);
}
}

30
modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Blogs/EfCoreBlogFeatureRepository.cs

@ -0,0 +1,30 @@
using Microsoft.EntityFrameworkCore;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.EntityFrameworkCore;
using Volo.Abp.EntityFrameworkCore;
using Volo.CmsKit.EntityFrameworkCore;
namespace Volo.CmsKit.Blogs
{
public class EfCoreBlogFeatureRepository : EfCoreRepository<CmsKitDbContext, BlogFeature, Guid>, IBlogFeatureRepository
{
public EfCoreBlogFeatureRepository(IDbContextProvider<CmsKitDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<BlogFeature> FindAsync(Guid blogId, string featureName)
{
return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName);
}
public async Task<List<BlogFeature>> GetListAsync(Guid blogId)
{
return await (await GetQueryableAsync())
.Where(x => x.BlogId == blogId)
.ToListAsync();
}
}
}

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

@ -26,6 +26,7 @@ namespace Volo.CmsKit.EntityFrameworkCore
public DbSet<Page> Pages { get; set; }
public DbSet<Blog> Blogs { get; set; }
public DbSet<BlogPost> BlogPosts { get; set; }
public DbSet<BlogFeature> BlogFeatures { get; set; }
public DbSet<MediaDescriptor> MediaDescriptors { get; set; }
public CmsKitDbContext(DbContextOptions<CmsKitDbContext> options)

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

@ -216,11 +216,21 @@ namespace Volo.CmsKit.EntityFrameworkCore
b.HasIndex(x => new { x.Slug, x.BlogId });
});
builder.Entity<BlogFeature>(b =>
{
b.ToTable(options.TablePrefix + "BlogFeatures", options.Schema);
b.ConfigureByConvention();
b.Property(p => p.FeatureName).IsRequired().HasMaxLength(BlogFeatureConsts.MaxFeatureNameLenth);
});
}
else
{
builder.Ignore<Blog>();
builder.Ignore<BlogPost>();
builder.Ignore<BlogFeature>();
}
if (GlobalFeatureManager.Instance.IsEnabled<MediaFeature>())

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

@ -35,6 +35,7 @@ namespace Volo.CmsKit.EntityFrameworkCore
options.AddRepository<Page, EfCorePageRepository>();
options.AddRepository<Blog, EfCoreBlogRepository>();
options.AddRepository<BlogPost, EfCoreBlogPostRepository>();
options.AddRepository<BlogFeature, EfCoreBlogFeatureRepository>();
options.AddRepository<MediaDescriptor, EfCoreMediaDescriptorRepository>();
});
}

32
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Blogs/MongoBlogFeatureRepository.cs

@ -0,0 +1,32 @@
using System;
using System.Collections.Generic;
using System.Linq;
using MongoDB.Driver.Linq;
using System.Text;
using System.Threading.Tasks;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Blogs;
using MongoDB.Driver;
namespace Volo.CmsKit.MongoDB.Blogs
{
public class MongoBlogFeatureRepository : MongoDbRepository<ICmsKitMongoDbContext, BlogFeature, Guid> , IBlogFeatureRepository
{
public MongoBlogFeatureRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public Task<BlogFeature> FindAsync(Guid blogId, string featureName)
{
return base.FindAsync(x => x.BlogId == blogId && x.FeatureName == featureName);
}
public async Task<List<BlogFeature>> GetListAsync(Guid blogId)
{
return await (await GetMongoQueryableAsync())
.Where(x => x.BlogId == blogId)
.ToListAsync();
}
}
}

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

@ -36,7 +36,9 @@ namespace Volo.CmsKit.MongoDB
public IMongoCollection<Blog> Blogs => Collection<Blog>();
public IMongoCollection<BlogPost> BlogPosts => Collection<BlogPost>();
public IMongoCollection<BlogFeature> BlogFeatures => Collection<BlogFeature>();
public IMongoCollection<MediaDescriptor> MediaDescriptors => Collection<MediaDescriptor>();
protected override void CreateModel(IMongoModelBuilder modelBuilder)

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

@ -76,6 +76,11 @@ namespace Volo.CmsKit.MongoDB
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogPosts";
});
builder.Entity<BlogFeature>(x =>
{
x.CollectionName = CmsKitDbProperties.DbTablePrefix + "BlogFeatures";
});
builder.Entity<MediaDescriptor>(x =>
{

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

@ -36,6 +36,8 @@ namespace Volo.CmsKit.MongoDB
IMongoCollection<Blog> Blogs { get; }
IMongoCollection<BlogPost> BlogPosts { get; }
IMongoCollection<BlogFeature> BlogFeatures { get; }
IMongoCollection<MediaDescriptor> MediaDescriptors { get; }
}

Loading…
Cancel
Save