From 6ade59cc09cd7171d79e5efc75c779e49c30a6a0 Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Thu, 19 Sep 2019 16:52:47 +0200 Subject: [PATCH 1/3] Add basic support for SoftDeletable --- Oqtane.Server/Repository/Context/DBContextBase.cs | 14 ++++++++++++++ Oqtane.Shared/Models/ISoftDeletable.cs | 11 +++++++++++ 2 files changed, 25 insertions(+) create mode 100644 Oqtane.Shared/Models/ISoftDeletable.cs diff --git a/Oqtane.Server/Repository/Context/DBContextBase.cs b/Oqtane.Server/Repository/Context/DBContextBase.cs index 8fb37ffb..587f078e 100644 --- a/Oqtane.Server/Repository/Context/DBContextBase.cs +++ b/Oqtane.Server/Repository/Context/DBContextBase.cs @@ -70,6 +70,20 @@ namespace Oqtane.Repository item.CurrentValues[nameof(IAuditable.ModifiedBy)] = username; item.CurrentValues[nameof(IAuditable.ModifiedOn)] = date; } + + if (item.Entity is ISoftDeletable softDeleted) + { + if ((bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)]) + { + item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = username; + item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = date; + } + else + { + item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = null; + item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = null; + } + } } return base.SaveChanges(); diff --git a/Oqtane.Shared/Models/ISoftDeletable.cs b/Oqtane.Shared/Models/ISoftDeletable.cs new file mode 100644 index 00000000..a0c1f370 --- /dev/null +++ b/Oqtane.Shared/Models/ISoftDeletable.cs @@ -0,0 +1,11 @@ +using System; + +namespace Oqtane.Models +{ + public interface ISoftDeletable + { + string DeletedBy { get; set; } + DateTime? DeletedOn { get; set; } + bool IsSoftDeleted { get; set; } + } +} From 182a156bd8db76189bc9a744cd169026a488f3af Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Fri, 20 Sep 2019 17:51:13 +0200 Subject: [PATCH 2/3] Improved to skip new Added entities and if softdelete properties are unmodified --- Oqtane.Server/Repository/Context/DBContextBase.cs | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/Oqtane.Server/Repository/Context/DBContextBase.cs b/Oqtane.Server/Repository/Context/DBContextBase.cs index 587f078e..20e3254e 100644 --- a/Oqtane.Server/Repository/Context/DBContextBase.cs +++ b/Oqtane.Server/Repository/Context/DBContextBase.cs @@ -71,14 +71,16 @@ namespace Oqtane.Repository item.CurrentValues[nameof(IAuditable.ModifiedOn)] = date; } - if (item.Entity is ISoftDeletable softDeleted) + if (item.Entity is ISoftDeletable softDeleted && item.State != EntityState.Added) { - if ((bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)]) + if ((bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)] + && !item.GetDatabaseValues().GetValue(nameof(ISoftDeletable.IsSoftDeleted))) { item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = username; item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = date; } - else + else if (!(bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)] + && item.GetDatabaseValues().GetValue(nameof(ISoftDeletable.IsSoftDeleted))) { item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = null; item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = null; From 4792ea697b3319e7a2105043889d6705d8ee419c Mon Sep 17 00:00:00 2001 From: Emanuele Filardo Date: Fri, 27 Sep 2019 18:50:25 +0200 Subject: [PATCH 3/3] Rename Interface in IDeletable and property in IsDeleted --- .../Repository/Context/DBContextBase.cs | 19 ++++++++++--------- .../IDeletable.cs} | 6 +++--- 2 files changed, 13 insertions(+), 12 deletions(-) rename Oqtane.Shared/{Models/ISoftDeletable.cs => Shared/IDeletable.cs} (53%) diff --git a/Oqtane.Server/Repository/Context/DBContextBase.cs b/Oqtane.Server/Repository/Context/DBContextBase.cs index 20e3254e..25956f19 100644 --- a/Oqtane.Server/Repository/Context/DBContextBase.cs +++ b/Oqtane.Server/Repository/Context/DBContextBase.cs @@ -3,6 +3,7 @@ using Microsoft.AspNetCore.Identity; using Microsoft.AspNetCore.Identity.EntityFrameworkCore; using Microsoft.EntityFrameworkCore; using Oqtane.Models; +using Oqtane.Shared; using System; using System.Linq; @@ -71,19 +72,19 @@ namespace Oqtane.Repository item.CurrentValues[nameof(IAuditable.ModifiedOn)] = date; } - if (item.Entity is ISoftDeletable softDeleted && item.State != EntityState.Added) + if (item.Entity is IDeletable deleted && item.State != EntityState.Added) { - if ((bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)] - && !item.GetDatabaseValues().GetValue(nameof(ISoftDeletable.IsSoftDeleted))) + if ((bool)item.CurrentValues[nameof(IDeletable.IsDeleted)] + && !item.GetDatabaseValues().GetValue(nameof(IDeletable.IsDeleted))) { - item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = username; - item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = date; + item.CurrentValues[nameof(IDeletable.DeletedBy)] = username; + item.CurrentValues[nameof(IDeletable.DeletedOn)] = date; } - else if (!(bool)item.CurrentValues[nameof(ISoftDeletable.IsSoftDeleted)] - && item.GetDatabaseValues().GetValue(nameof(ISoftDeletable.IsSoftDeleted))) + else if (!(bool)item.CurrentValues[nameof(IDeletable.IsDeleted)] + && item.GetDatabaseValues().GetValue(nameof(IDeletable.IsDeleted))) { - item.CurrentValues[nameof(ISoftDeletable.DeletedBy)] = null; - item.CurrentValues[nameof(ISoftDeletable.DeletedOn)] = null; + item.CurrentValues[nameof(IDeletable.DeletedBy)] = null; + item.CurrentValues[nameof(IDeletable.DeletedOn)] = null; } } } diff --git a/Oqtane.Shared/Models/ISoftDeletable.cs b/Oqtane.Shared/Shared/IDeletable.cs similarity index 53% rename from Oqtane.Shared/Models/ISoftDeletable.cs rename to Oqtane.Shared/Shared/IDeletable.cs index a0c1f370..6198dcde 100644 --- a/Oqtane.Shared/Models/ISoftDeletable.cs +++ b/Oqtane.Shared/Shared/IDeletable.cs @@ -1,11 +1,11 @@ using System; -namespace Oqtane.Models +namespace Oqtane.Shared { - public interface ISoftDeletable + public interface IDeletable { string DeletedBy { get; set; } DateTime? DeletedOn { get; set; } - bool IsSoftDeleted { get; set; } + bool IsDeleted { get; set; } } }