implemented automatic database cleanup

This commit is contained in:
2024-12-23 15:54:14 +01:00
parent a323da829f
commit b8b0d571ab
3 changed files with 73 additions and 15 deletions

View File

@@ -8,6 +8,8 @@ namespace HopFrame.Database;
/// </summary>
public abstract class HopDbContextBase : DbContext {
public static IList<Action<HopDbContextBase>> SaveHandlers = new List<Action<HopDbContextBase>>();
public virtual DbSet<User> Users { get; set; }
public virtual DbSet<Permission> Permissions { get; set; }
public virtual DbSet<Token> Tokens { get; set; }
@@ -36,4 +38,36 @@ public abstract class HopDbContextBase : DbContext {
.WithOne(t => t.Token)
.OnDelete(DeleteBehavior.Cascade);
}
private void OnSaving() {
var orphanedPermissions = Permissions
.Where(p => p.UserId == null && p.GroupName == null && p.TokenId == null)
.ToList();
foreach (var handler in SaveHandlers) {
handler.Invoke(this);
}
Permissions.RemoveRange(orphanedPermissions);
}
public override int SaveChanges() {
OnSaving();
return base.SaveChanges();
}
public override int SaveChanges(bool acceptAllChangesOnSuccess) {
OnSaving();
return base.SaveChanges(acceptAllChangesOnSuccess);
}
public override Task<int> SaveChangesAsync(CancellationToken cancellationToken = new CancellationToken()) {
OnSaving();
return base.SaveChangesAsync(cancellationToken);
}
public override Task<int> SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken()) {
OnSaving();
return base.SaveChangesAsync(acceptAllChangesOnSuccess, cancellationToken);
}
}

View File

@@ -18,12 +18,18 @@ public class Permission {
[ForeignKey("UserId"), JsonIgnore]
public virtual User User { get; set; }
public Guid? UserId { get; set; }
[ForeignKey("GroupName"), JsonIgnore]
public virtual PermissionGroup Group { get; set; }
[MaxLength(255)]
public string GroupName { get; set; }
[ForeignKey("TokenId"), JsonIgnore]
public virtual Token Token { get; set; }
public Guid? TokenId { get; set; }
}
public interface IPermissionOwner;