diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
index f016bed623..ee064cbedc 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo.CmsKit.Domain.csproj
@@ -11,6 +11,7 @@
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs
index e67bca57df..7659c40126 100644
--- a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/CmsKitDomainModule.cs
@@ -1,11 +1,13 @@
using Volo.Abp.Domain;
using Volo.Abp.Modularity;
+using Volo.Abp.Users;
using Volo.CmsKit.Reactions;
namespace Volo.CmsKit
{
[DependsOn(
typeof(CmsKitDomainSharedModule),
+ typeof(AbpUsersDomainModule),
typeof(AbpDddDomainModule)
)]
public class CmsKitDomainModule : AbpModule
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUser.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUser.cs
new file mode 100644
index 0000000000..7e66aae6a1
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUser.cs
@@ -0,0 +1,82 @@
+using System;
+using Volo.Abp.Domain.Entities;
+using Volo.Abp.Users;
+
+namespace Volo.CmsKit.Users
+{
+ public class CmsUser : AggregateRoot, IUser, IUpdateUserData
+ {
+ public virtual Guid? TenantId { get; protected set; }
+
+ public virtual string UserName { get; protected set; }
+
+ public virtual string Email { get; protected set; }
+
+ public virtual string Name { get; set; }
+
+ public virtual string Surname { get; set; }
+
+ public virtual bool EmailConfirmed { get; protected set; }
+
+ public virtual string PhoneNumber { get; protected set; }
+
+ public virtual bool PhoneNumberConfirmed { get; protected set; }
+
+ protected CmsUser()
+ {
+
+ }
+
+ public CmsUser(IUserData user)
+ : base(user.Id)
+ {
+ TenantId = user.TenantId;
+ UpdateInternal(user);
+ }
+
+ public virtual bool Update(IUserData user)
+ {
+ if (Id != user.Id)
+ {
+ throw new ArgumentException($"Given User's Id '{user.Id}' does not match to this User's Id '{Id}'");
+ }
+
+ if (TenantId != user.TenantId)
+ {
+ throw new ArgumentException($"Given User's TenantId '{user.TenantId}' does not match to this User's TenantId '{TenantId}'");
+ }
+
+ if (Equals(user))
+ {
+ return false;
+ }
+
+ UpdateInternal(user);
+ return true;
+ }
+
+ protected virtual bool Equals(IUserData user)
+ {
+ return Id == user.Id &&
+ TenantId == user.TenantId &&
+ UserName == user.UserName &&
+ Name == user.Name &&
+ Surname == user.Surname &&
+ Email == user.Email &&
+ EmailConfirmed == user.EmailConfirmed &&
+ PhoneNumber == user.PhoneNumber &&
+ PhoneNumberConfirmed == user.PhoneNumberConfirmed;
+ }
+
+ protected virtual void UpdateInternal(IUserData user)
+ {
+ Email = user.Email;
+ Name = user.Name;
+ Surname = user.Surname;
+ EmailConfirmed = user.EmailConfirmed;
+ PhoneNumber = user.PhoneNumber;
+ PhoneNumberConfirmed = user.PhoneNumberConfirmed;
+ UserName = user.UserName;
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserLookupService.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserLookupService.cs
new file mode 100644
index 0000000000..0771140a10
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserLookupService.cs
@@ -0,0 +1,24 @@
+using Volo.Abp.Uow;
+using Volo.Abp.Users;
+
+namespace Volo.CmsKit.Users
+{
+ public class CmsUserLookupService: UserLookupService, ICmsUserLookupService
+ {
+ public CmsUserLookupService(
+ ICmsUserRepository userRepository,
+ IUnitOfWorkManager unitOfWorkManager)
+ : base(
+ userRepository,
+ unitOfWorkManager)
+ {
+
+ }
+
+ protected override CmsUser CreateUser(IUserData externalUser)
+ {
+ return new CmsUser(externalUser);
+ }
+
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserSynchronizer.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserSynchronizer.cs
new file mode 100644
index 0000000000..6fc785ad4a
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/CmsUserSynchronizer.cs
@@ -0,0 +1,43 @@
+using System.Threading.Tasks;
+using Volo.Abp.DependencyInjection;
+using Volo.Abp.Domain.Entities.Events.Distributed;
+using Volo.Abp.EventBus.Distributed;
+using Volo.Abp.Users;
+
+namespace Volo.CmsKit.Users
+{
+ public class CmsUserSynchronizer :
+ IDistributedEventHandler>,
+ ITransientDependency
+ {
+ protected ICmsUserRepository UserRepository { get; }
+
+ protected ICmsUserLookupService UserLookupService { get; }
+
+ public CmsUserSynchronizer(
+ ICmsUserRepository userRepository,
+ ICmsUserLookupService userLookupService)
+ {
+ UserRepository = userRepository;
+ UserLookupService = userLookupService;
+ }
+
+ public virtual async Task HandleEventAsync(EntityUpdatedEto eventData)
+ {
+ var user = await UserRepository.FindAsync(eventData.Entity.Id);
+ if (user == null)
+ {
+ user = await UserLookupService.FindByIdAsync(eventData.Entity.Id);
+ if (user == null)
+ {
+ return;
+ }
+ }
+
+ if (user.Update(eventData.Entity))
+ {
+ await UserRepository.UpdateAsync(user);
+ }
+ }
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserLookupService.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserLookupService.cs
new file mode 100644
index 0000000000..8731a187fc
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserLookupService.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Users;
+
+namespace Volo.CmsKit.Users
+{
+ public interface ICmsUserLookupService : IUserLookupService
+ {
+
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserRepository.cs b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserRepository.cs
new file mode 100644
index 0000000000..95971911af
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.Domain/Volo/CmsKit/Users/ICmsUserRepository.cs
@@ -0,0 +1,9 @@
+using Volo.Abp.Users;
+
+namespace Volo.CmsKit.Users
+{
+ public interface ICmsUserRepository: IUserRepository
+ {
+
+ }
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
index de174d0afd..ace2e010bd 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo.CmsKit.EntityFrameworkCore.csproj
@@ -10,7 +10,8 @@
-
+
+
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
index 01384a3aa1..8033522f70 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContext.cs
+++ b/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.Comments;
using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
@@ -13,6 +14,8 @@ namespace Volo.CmsKit.EntityFrameworkCore
public DbSet Comments { get; set; }
+ public DbSet CmsUsers { get; set; }
+
public CmsKitDbContext(DbContextOptions options)
: base(options)
{
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
index e551412d5e..cb7a7b78d6 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitDbContextModelCreatingExtensions.cs
@@ -4,6 +4,8 @@ using Volo.Abp;
using Volo.Abp.EntityFrameworkCore.Modeling;
using Volo.CmsKit.Comments;
using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
+using Volo.Abp.Users.EntityFrameworkCore;
namespace Volo.CmsKit.EntityFrameworkCore
{
@@ -22,6 +24,14 @@ namespace Volo.CmsKit.EntityFrameworkCore
optionsAction?.Invoke(options);
+ builder.Entity(b =>
+ {
+ b.ToTable(options.TablePrefix + "Users", options.Schema);
+
+ b.ConfigureByConvention();
+ b.ConfigureAbpUser();
+ });
+
builder.Entity(b =>
{
b.ToTable(options.TablePrefix + "UserReactions", options.Schema);
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
index afad9b56e8..028bc466b2 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/CmsKitEntityFrameworkCoreModule.cs
@@ -1,11 +1,16 @@
using Microsoft.Extensions.DependencyInjection;
using Volo.Abp.EntityFrameworkCore;
using Volo.Abp.Modularity;
+using Volo.Abp.Users.EntityFrameworkCore;
+using Volo.CmsKit.Comments;
+using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
[DependsOn(
typeof(CmsKitDomainModule),
+ typeof(AbpUsersEntityFrameworkCoreModule),
typeof(AbpEntityFrameworkCoreModule)
)]
public class CmsKitEntityFrameworkCoreModule : AbpModule
@@ -14,10 +19,10 @@ namespace Volo.CmsKit.EntityFrameworkCore
{
context.Services.AddAbpDbContext(options =>
{
- /* Add custom repositories here. Example:
- * options.AddRepository();
- */
+ options.AddRepository();
+ options.AddRepository();
+ options.AddRepository();
});
}
}
-}
\ No newline at end of file
+}
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
index ecd807d005..e63366d5ae 100644
--- a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/EntityFrameworkCore/ICmsKitDbContext.cs
+++ b/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.Comments;
using Volo.CmsKit.Reactions;
+using Volo.CmsKit.Users;
namespace Volo.CmsKit.EntityFrameworkCore
{
@@ -12,5 +13,7 @@ namespace Volo.CmsKit.EntityFrameworkCore
DbSet UserReactions { get; }
DbSet Comments { get; }
+
+ DbSet CmsUsers { get; set; }
}
}
diff --git a/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Users/EfCoreCmsUserRepository.cs b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Users/EfCoreCmsUserRepository.cs
new file mode 100644
index 0000000000..0b6e804be0
--- /dev/null
+++ b/modules/cms-kit/src/Volo.CmsKit.EntityFrameworkCore/Volo/CmsKit/Users/EfCoreCmsUserRepository.cs
@@ -0,0 +1,14 @@
+using Volo.Abp.EntityFrameworkCore;
+using Volo.Abp.Users.EntityFrameworkCore;
+using Volo.CmsKit.EntityFrameworkCore;
+
+namespace Volo.CmsKit.Users
+{
+ public class EfCoreCmsUserRepository: EfCoreUserRepositoryBase, ICmsUserRepository
+ {
+ public EfCoreCmsUserRepository(IDbContextProvider dbContextProvider)
+ : base(dbContextProvider)
+ {
+ }
+ }
+}