diff --git a/AyCode.Database/DataLayers/Users/UserDalExtension.cs b/AyCode.Database/DataLayers/Users/AcUserDalExtension.cs similarity index 99% rename from AyCode.Database/DataLayers/Users/UserDalExtension.cs rename to AyCode.Database/DataLayers/Users/AcUserDalExtension.cs index f32a37c..b549a13 100644 --- a/AyCode.Database/DataLayers/Users/UserDalExtension.cs +++ b/AyCode.Database/DataLayers/Users/AcUserDalExtension.cs @@ -9,7 +9,7 @@ using Microsoft.Extensions.DependencyInjection; namespace AyCode.Database.DataLayers.Users { - public static class UserDalExtension + public static class AcUserDalExtension { //public static bool DeleteUser(this IUserDbContextBase ctx, IUserBase user) //{ diff --git a/AyCode.Database/DbContexts/DbContextBase.cs b/AyCode.Database/DbContexts/DbContextBase.cs index d144087..4915eb0 100644 --- a/AyCode.Database/DbContexts/DbContextBase.cs +++ b/AyCode.Database/DbContexts/DbContextBase.cs @@ -32,6 +32,27 @@ public class DbContextBase : DbContext } public override int SaveChanges() + { + UpdateTimeStampInfoProperties(); + + return base.SaveChanges(); + } + + public override Task SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) + { + UpdateTimeStampInfoProperties(); + + return base.SaveChangesAsync(cancellationToken); + } + + public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken()) + { + UpdateTimeStampInfoProperties(); + + return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken); + } + + private void UpdateTimeStampInfoProperties() { var entries = ChangeTracker.Entries().Where(e => e.Entity is not ITimeStampDisableAutoSet && (e is { State: EntityState.Added, Entity: ITimeStampCreated } || e.State is EntityState.Modified or EntityState.Added && e.Entity is ITimeStampModified)); @@ -48,8 +69,6 @@ public class DbContextBase : DbContext if (entityEntry.Entity is ITimeStampCreated timeStampCreated) timeStampCreated.Created = utcNow; } - - return base.SaveChanges(); } protected override void OnModelCreating(ModelBuilder modelBuilder) diff --git a/AyCode.Database/DbContexts/Users/UserDbContextBase.cs b/AyCode.Database/DbContexts/Users/UserDbContextBase.cs index d6c9c32..5e596cf 100644 --- a/AyCode.Database/DbContexts/Users/UserDbContextBase.cs +++ b/AyCode.Database/DbContexts/Users/UserDbContextBase.cs @@ -8,7 +8,9 @@ using Microsoft.EntityFrameworkCore; namespace AyCode.Database.DbContexts.Users { - public abstract class UserDbContextBase : DbContextBase, IUserDbContextBase where TUser : class, IUserBase where TUserToken : class, IUserTokenBase + public abstract class UserDbContextBase : DbContextBase, IUserDbContextBase + where TUser : class, IUserBase + where TUserToken : class, IUserTokenBase { public required DbSet Users { get; set; } public required DbSet UserTokens { get; set; } diff --git a/AyCode.Entities/Groups/GroupBase.cs b/AyCode.Entities/Groups/GroupBase.cs index 91365d5..dac2865 100644 --- a/AyCode.Entities/Groups/GroupBase.cs +++ b/AyCode.Entities/Groups/GroupBase.cs @@ -10,18 +10,19 @@ using AyCode.Interfaces.Groups; namespace AyCode.Entities.Groups { //[Table("Groups")] - public class GroupBase : IGroupBase + public abstract class GroupBase : IGroupBase { - public GroupBase() { } + protected GroupBase() { } - public GroupBase(bool isPublic) : this(Guid.NewGuid(), isPublic) { } - public GroupBase(Guid id, bool isPublic) : this() + protected GroupBase(bool isPublic) : this(Guid.NewGuid(), isPublic) { } + + protected GroupBase(Guid id, bool isPublic) : this() { Id = id; IsPublic = isPublic; } - //[Key, DatabaseGenerated(DatabaseGeneratedOption.None)] + [Key, DatabaseGenerated(DatabaseGeneratedOption.None)] public Guid Id { get; set; } public bool IsPublic { get; set; } public DateTime Created { get; set; } diff --git a/AyCode.Models/Enums/PermissionContextMappingSubjectType.cs b/AyCode.Entities/PermissionContextMappingSubjectType.cs similarity index 100% rename from AyCode.Models/Enums/PermissionContextMappingSubjectType.cs rename to AyCode.Entities/PermissionContextMappingSubjectType.cs diff --git a/AyCode.Interfaces/Groups/IGroupBase.cs b/AyCode.Interfaces/Groups/IGroupBase.cs index 0aaa942..289e6c0 100644 --- a/AyCode.Interfaces/Groups/IGroupBase.cs +++ b/AyCode.Interfaces/Groups/IGroupBase.cs @@ -8,7 +8,7 @@ using System.Threading.Tasks; namespace AyCode.Interfaces.Groups { - public interface IGroupBase : IEntity, ITimeStampInfo + public interface IGroupBase : IEntityGuid, ITimeStampInfo { } } diff --git a/AyCode.Interfaces/Users/IUserBase.cs b/AyCode.Interfaces/Users/IUserBase.cs index 153af31..98caa66 100644 --- a/AyCode.Interfaces/Users/IUserBase.cs +++ b/AyCode.Interfaces/Users/IUserBase.cs @@ -6,4 +6,5 @@ namespace AyCode.Interfaces.Users; public interface IUserBase : IEntityGuid, IEmailAddress, IPassword, ITimeStampInfo { + public string? RefreshToken { get; set; } } \ No newline at end of file