Browse Source

Cmskit mongodb support

pull/5016/head
Yunus Emre Kalkan 6 years ago
parent
commit
beef6af3a1
  1. 1
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
  2. 16
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
  3. 11
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
  4. 55
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs
  5. 14
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs
  6. 75
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs
  7. 15
      modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Users/MongoCmsUserRepository.cs

1
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj

@ -11,6 +11,7 @@
<ItemGroup> <ItemGroup>
<ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.MongoDB\Volo.Abp.MongoDB.csproj" /> <ProjectReference Include="..\..\..\..\framework\src\Volo.Abp.MongoDB\Volo.Abp.MongoDB.csproj" />
<ProjectReference Include="..\Volo.CmsKit.Domain\Volo.CmsKit.Domain.csproj" /> <ProjectReference Include="..\Volo.CmsKit.Domain\Volo.CmsKit.Domain.csproj" />
<ProjectReference Include="..\..\..\..\modules\users\src\Volo.Abp.Users.MongoDB\Volo.Abp.Users.MongoDB.csproj" />
</ItemGroup> </ItemGroup>
</Project> </Project>

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

@ -1,14 +1,20 @@
using Volo.Abp.Data; using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB namespace Volo.CmsKit.MongoDB
{ {
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] [ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext
{ {
/* Add mongo collections here. Example: public IMongoCollection<Comment> Comments => Collection<Comment>();
* public IMongoCollection<Question> Questions => Collection<Question>();
*/ public IMongoCollection<UserReaction> UserReactions => Collection<UserReaction>();
public IMongoCollection<CmsUser> CmsUsers => Collection<CmsUser>();
protected override void CreateModel(IMongoModelBuilder modelBuilder) protected override void CreateModel(IMongoModelBuilder modelBuilder)
{ {
@ -17,4 +23,4 @@ namespace Volo.CmsKit.MongoDB
modelBuilder.ConfigureCmsKit(); modelBuilder.ConfigureCmsKit();
} }
} }
} }

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

@ -1,11 +1,19 @@
using Microsoft.Extensions.DependencyInjection; using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity; using Volo.Abp.Modularity;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
using Volo.Abp.Users.MongoDB;
using Volo.CmsKit.Comments;
using Volo.CmsKit.MongoDB.Comments;
using Volo.CmsKit.MongoDB.Reactions;
using Volo.CmsKit.MongoDB.Users;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB namespace Volo.CmsKit.MongoDB
{ {
[DependsOn( [DependsOn(
typeof(CmsKitDomainModule), typeof(CmsKitDomainModule),
typeof(AbpUsersMongoDbModule),
typeof(AbpMongoDbModule) typeof(AbpMongoDbModule)
)] )]
public class CmsKitMongoDbModule : AbpModule public class CmsKitMongoDbModule : AbpModule
@ -14,6 +22,9 @@ namespace Volo.CmsKit.MongoDB
{ {
context.Services.AddMongoDbContext<CmsKitMongoDbContext>(options => context.Services.AddMongoDbContext<CmsKitMongoDbContext>(options =>
{ {
options.AddRepository<UserReaction, MongoUserReactionRepository>();
options.AddRepository<Comment, MongoCommentRepository>();
options.AddRepository<CmsUser, MongoCmsUserRepository>();
/* Add custom repositories here. Example: /* Add custom repositories here. Example:
* options.AddRepository<Question, MongoQuestionRepository>(); * options.AddRepository<Question, MongoQuestionRepository>();
*/ */

55
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs

@ -0,0 +1,55 @@
using System;
using System.Collections.Generic;
using System.Threading;
using System.Threading.Tasks;
using MongoDB.Driver.Linq;
using MongoDB.Driver;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Comments;
namespace Volo.CmsKit.MongoDB.Comments
{
public class MongoCommentRepository : MongoDbRepository<ICmsKitMongoDbContext, Comment, Guid>, ICommentRepository
{
public MongoCommentRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<List<CommentWithAuthor>> GetListWithAuthorsAsync(
string entityType,
string entityId)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
Check.NotNullOrWhiteSpace(entityId, nameof(entityId));
var query = from comment in GetMongoQueryable()
join user in DbContext.CmsUsers on comment.CreatorId equals user.Id
where entityType == comment.EntityType && entityId == comment.EntityId
orderby comment.CreationTime
select new CommentWithAuthor
{
Comment = comment,
Author = user
};
return await query.ToListAsync();
}
public override async Task DeleteAsync(Guid id, bool autoSave = false, CancellationToken cancellationToken = default)
{
var replies = await GetMongoQueryable()
.Where(x => x.RepliedCommentId == id)
.ToListAsync(GetCancellationToken(cancellationToken));
foreach (var reply in replies)
{
//TODO: Discuss if it is better to mark it as deleted and show in the ui as "This is deleted" instead of deleting it and replies completely
await base.DeleteAsync(reply.Id, autoSave, GetCancellationToken(cancellationToken));
}
await base.DeleteAsync(id, autoSave, GetCancellationToken(cancellationToken));
}
}
}

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

@ -1,13 +1,19 @@
using Volo.Abp.Data; using MongoDB.Driver;
using Volo.Abp.Data;
using Volo.Abp.MongoDB; using Volo.Abp.MongoDB;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Reactions;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB namespace Volo.CmsKit.MongoDB
{ {
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)] [ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public interface ICmsKitMongoDbContext : IAbpMongoDbContext public interface ICmsKitMongoDbContext : IAbpMongoDbContext
{ {
/* Define mongo collections here. Example: IMongoCollection<UserReaction> UserReactions { get; }
* IMongoCollection<Question> Questions { get; }
*/ IMongoCollection<Comment> Comments { get; }
IMongoCollection<CmsUser> CmsUsers { get; }
} }
} }

75
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs

@ -0,0 +1,75 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using MongoDB.Driver;
using MongoDB.Driver.Linq;
using Volo.Abp;
using Volo.Abp.Domain.Repositories.MongoDB;
using Volo.Abp.MongoDB;
using Volo.CmsKit.Reactions;
namespace Volo.CmsKit.MongoDB.Reactions
{
public class MongoUserReactionRepository : MongoDbRepository<ICmsKitMongoDbContext, UserReaction, Guid>, IUserReactionRepository
{
public MongoUserReactionRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider) : base(dbContextProvider)
{
}
public async Task<UserReaction> FindAsync(
Guid userId,
string entityType,
string entityId,
string reactionName)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
Check.NotNullOrWhiteSpace(entityId, nameof(entityId));
Check.NotNullOrWhiteSpace(reactionName, nameof(reactionName));
return await GetMongoQueryable()
.Where(x =>
x.CreatorId == userId &&
x.EntityType == entityType &&
x.EntityId == entityId &&
x.ReactionName == reactionName)
.FirstOrDefaultAsync();
}
public async Task<List<UserReaction>> GetListForUserAsync(
Guid userId,
string entityType,
string entityId)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
Check.NotNullOrWhiteSpace(entityId, nameof(entityId));
return await GetMongoQueryable()
.Where(x =>
x.CreatorId == userId &&
x.EntityType == entityType &&
x.EntityId == entityId)
.ToListAsync();
}
public async Task<List<ReactionSummaryQueryResultItem>> GetSummariesAsync(
string entityType,
string entityId)
{
Check.NotNullOrWhiteSpace(entityType, nameof(entityType));
Check.NotNullOrWhiteSpace(entityId, nameof(entityId));
return await GetMongoQueryable()
.Where(x =>
x.EntityType == entityType &&
x.EntityId == entityId)
.GroupBy(x => x.ReactionName)
.Select(g => new ReactionSummaryQueryResultItem
{
ReactionName = g.Key,
Count = g.Count()
})
.ToListAsync();
}
}
}

15
modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Users/MongoCmsUserRepository.cs

@ -0,0 +1,15 @@
using Volo.Abp.MongoDB;
using Volo.Abp.Users.MongoDB;
using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB.Users
{
public class MongoCmsUserRepository : MongoUserRepositoryBase<ICmsKitMongoDbContext, CmsUser>, ICmsUserRepository
{
public MongoCmsUserRepository(IMongoDbContextProvider<ICmsKitMongoDbContext> dbContextProvider)
: base(dbContextProvider)
{
}
}
}
Loading…
Cancel
Save