diff --git a/src/FilterLists.Data/Entities/Junctions/BaseJunction.cs b/src/FilterLists.Data/Entities/Junctions/BaseJunction.cs new file mode 100644 index 000000000..6f45b4f98 --- /dev/null +++ b/src/FilterLists.Data/Entities/Junctions/BaseJunction.cs @@ -0,0 +1,9 @@ +using System; + +namespace FilterLists.Data.Entities.Junctions +{ + public class BaseJunction + { + public DateTime CreatedDateUtc { get; set; } + } +} \ No newline at end of file diff --git a/src/FilterLists.Data/Entities/Junctions/FilterListLanguage.cs b/src/FilterLists.Data/Entities/Junctions/FilterListLanguage.cs index 69696ceb7..a8c5e3e57 100644 --- a/src/FilterLists.Data/Entities/Junctions/FilterListLanguage.cs +++ b/src/FilterLists.Data/Entities/Junctions/FilterListLanguage.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class FilterListLanguage + public class FilterListLanguage : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int FilterListId { get; set; } public FilterList FilterList { get; set; } diff --git a/src/FilterLists.Data/Entities/Junctions/FilterListMaintainer.cs b/src/FilterLists.Data/Entities/Junctions/FilterListMaintainer.cs index c68b16eb7..1afe6d11c 100644 --- a/src/FilterLists.Data/Entities/Junctions/FilterListMaintainer.cs +++ b/src/FilterLists.Data/Entities/Junctions/FilterListMaintainer.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class FilterListMaintainer + public class FilterListMaintainer : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int FilterListId { get; set; } public FilterList FilterList { get; set; } diff --git a/src/FilterLists.Data/Entities/Junctions/FilterListRule.cs b/src/FilterLists.Data/Entities/Junctions/FilterListRule.cs index 03fba3384..e8d709aeb 100644 --- a/src/FilterLists.Data/Entities/Junctions/FilterListRule.cs +++ b/src/FilterLists.Data/Entities/Junctions/FilterListRule.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class FilterListRule + public class FilterListRule : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int FilterListId { get; set; } public FilterList FilterList { get; set; } diff --git a/src/FilterLists.Data/Entities/Junctions/Fork.cs b/src/FilterLists.Data/Entities/Junctions/Fork.cs index 6e43f2723..f0f98f23b 100644 --- a/src/FilterLists.Data/Entities/Junctions/Fork.cs +++ b/src/FilterLists.Data/Entities/Junctions/Fork.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class Fork + public class Fork : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int ForkFilterListId { get; set; } public FilterList ForkFilterList { get; set; } diff --git a/src/FilterLists.Data/Entities/Junctions/Merge.cs b/src/FilterLists.Data/Entities/Junctions/Merge.cs index 3528b3f44..f585e898d 100644 --- a/src/FilterLists.Data/Entities/Junctions/Merge.cs +++ b/src/FilterLists.Data/Entities/Junctions/Merge.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class Merge + public class Merge : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int MergeFilterListId { get; set; } public FilterList MergeFilterList { get; set; } diff --git a/src/FilterLists.Data/Entities/Junctions/SoftwareSyntax.cs b/src/FilterLists.Data/Entities/Junctions/SoftwareSyntax.cs index 3f9fb6e83..0f22ceec4 100644 --- a/src/FilterLists.Data/Entities/Junctions/SoftwareSyntax.cs +++ b/src/FilterLists.Data/Entities/Junctions/SoftwareSyntax.cs @@ -1,11 +1,7 @@ -using System; - -namespace FilterLists.Data.Entities.Junctions +namespace FilterLists.Data.Entities.Junctions { - public class SoftwareSyntax + public class SoftwareSyntax : BaseJunction { - public DateTime CreatedDateUtc { get; set; } - public int SoftwareId { get; set; } public Software Software { get; set; } diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs new file mode 100644 index 000000000..9c9577815 --- /dev/null +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs @@ -0,0 +1,17 @@ +using FilterLists.Data.Entities.Junctions; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Data.EntityTypeConfigurations.Junctions +{ + public class JunctionBaseTypeConfiguration : IEntityTypeConfiguration + where TJunction : BaseJunction + { + public virtual void Configure(EntityTypeBuilder entityTypeBuilder) + { + entityTypeBuilder.Property(x => x.CreatedDateUtc) + .HasColumnType("TIMESTAMP") + .ValueGeneratedOnAdd(); + } + } +} \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs index 58a76ce69..354ef7b44 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class FilterListLanguageTypeConfiguration : IEntityTypeConfiguration + public class FilterListLanguageTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("filterlists_languages"); entityTypeBuilder.HasKey(x => new {x.FilterListId, x.LanguageId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs index fe224a4c0..2437321c7 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class FilterListMaintainerTypeConfiguration : IEntityTypeConfiguration + public class FilterListMaintainerTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("filterlists_maintainers"); entityTypeBuilder.HasKey(x => new {x.FilterListId, x.MaintainerId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs index dbe85a5bd..d512577ab 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class FilterListRuleTypeConfiguration : IEntityTypeConfiguration + public class FilterListRuleTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("filterlists_rules"); entityTypeBuilder.HasKey(x => new {x.FilterListId, x.RuleId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs index c95724996..010c4f12c 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class ForkTypeConfiguration : IEntityTypeConfiguration + public class ForkTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("forks"); entityTypeBuilder.HasKey(x => new {x.ForkFilterListId, x.UpstreamFilterListId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs index 6ba74d369..e5adfa706 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class MergeTypeConfiguration : IEntityTypeConfiguration + public class MergeTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("merges"); entityTypeBuilder.HasKey(x => new {x.MergeFilterListId, x.UpstreamFilterListId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs index 017745acf..6f773e25e 100644 --- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs +++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs @@ -4,15 +4,13 @@ namespace FilterLists.Data.EntityTypeConfigurations.Junctions { - public class SoftwareSyntaxTypeConfiguration : IEntityTypeConfiguration + public class SoftwareSyntaxTypeConfiguration : JunctionBaseTypeConfiguration { - public void Configure(EntityTypeBuilder entityTypeBuilder) + public override void Configure(EntityTypeBuilder entityTypeBuilder) { + base.Configure(entityTypeBuilder); entityTypeBuilder.ToTable("software_syntaxes"); entityTypeBuilder.HasKey(x => new {x.SoftwareId, x.SyntaxId}); - entityTypeBuilder.Property(x => x.CreatedDateUtc) - .HasColumnType("TIMESTAMP") - .ValueGeneratedOnAdd(); } } } \ No newline at end of file diff --git a/src/FilterLists.Services/Services/ScrapeService.cs b/src/FilterLists.Services/Services/ScrapeService.cs index 7d1c6f95d..92e2f77df 100644 --- a/src/FilterLists.Services/Services/ScrapeService.cs +++ b/src/FilterLists.Services/Services/ScrapeService.cs @@ -85,6 +85,8 @@ private async Task AddOrUpdateRules(Snapshot snapshot) .Where(x => deletedRules.Select(y => y.Id).Contains(x.RuleId)) .Where(x => x.FilterListId == snapshot.FilterListId)); + //TODO: consider never removing FilterListsRules but rather marking a flag as deprecated to expose when rule was removed + if (newCurrentRules.Any() || deletedRules.Any()) { var list = filterListsDbContext.FilterLists.FindAsync(snapshot.FilterListId).Result;