diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
index 079112e5b2..7276030327 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo.CmsKit.MongoDB.csproj
@@ -11,6 +11,7 @@
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
index 5587203290..63bf48a14e 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbContext.cs
+++ b/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.CmsKit.Comments;
+using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public class CmsKitMongoDbContext : AbpMongoDbContext, ICmsKitMongoDbContext
{
- /* Add mongo collections here. Example:
- * public IMongoCollection Questions => Collection();
- */
+ public IMongoCollection Comments => Collection();
+
+ public IMongoCollection UserReactions => Collection();
+
+ public IMongoCollection CmsUsers => Collection();
protected override void CreateModel(IMongoModelBuilder modelBuilder)
{
@@ -17,4 +23,4 @@ namespace Volo.CmsKit.MongoDB
modelBuilder.ConfigureCmsKit();
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
index b9ce6b7862..c54a1456aa 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/CmsKitMongoDbModule.cs
@@ -1,11 +1,19 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.Modularity;
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
{
[DependsOn(
typeof(CmsKitDomainModule),
+ typeof(AbpUsersMongoDbModule),
typeof(AbpMongoDbModule)
)]
public class CmsKitMongoDbModule : AbpModule
@@ -14,6 +22,9 @@ namespace Volo.CmsKit.MongoDB
{
context.Services.AddMongoDbContext(options =>
{
+ options.AddRepository();
+ options.AddRepository();
+ options.AddRepository();
/* Add custom repositories here. Example:
* options.AddRepository();
*/
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Comments/MongoCommentRepository.cs
new file mode 100644
index 0000000000..9af5a72845
--- /dev/null
+++ b/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, ICommentRepository
+ {
+ public MongoCommentRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+
+ public async Task> 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));
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs
index 101efedaa4..16b72c8902 100644
--- a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/ICmsKitMongoDbContext.cs
+++ b/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.CmsKit.Comments;
+using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
namespace Volo.CmsKit.MongoDB
{
[ConnectionStringName(CmsKitDbProperties.ConnectionStringName)]
public interface ICmsKitMongoDbContext : IAbpMongoDbContext
{
- /* Define mongo collections here. Example:
- * IMongoCollection Questions { get; }
- */
+ IMongoCollection UserReactions { get; }
+
+ IMongoCollection Comments { get; }
+
+ IMongoCollection CmsUsers { get; }
}
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Reactions/MongoUserReactionRepository.cs
new file mode 100644
index 0000000000..ae3b28766a
--- /dev/null
+++ b/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, IUserReactionRepository
+ {
+ public MongoUserReactionRepository(IMongoDbContextProvider dbContextProvider) : base(dbContextProvider)
+ {
+ }
+
+ public async Task 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> 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> 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();
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Users/MongoCmsUserRepository.cs b/modules/cms-kit/src/Volo.CmsKit.MongoDB/Volo/CmsKit/MongoDB/Users/MongoCmsUserRepository.cs
new file mode 100644
index 0000000000..ed2691a5a8
--- /dev/null
+++ b/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, ICmsUserRepository
+ {
+ public MongoCmsUserRepository(IMongoDbContextProvider dbContextProvider)
+ : base(dbContextProvider)
+ {
+ }
+
+ }
+}