diff --git a/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.Designer.cs b/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.Designer.cs
new file mode 100644
index 000000000..8a99a057f
--- /dev/null
+++ b/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.Designer.cs
@@ -0,0 +1,455 @@
+//
+using FilterLists.Data;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Metadata;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Microsoft.EntityFrameworkCore.Storage;
+using Microsoft.EntityFrameworkCore.Storage.Internal;
+using System;
+
+namespace FilterLists.Api.Migrations
+{
+ [DbContext(typeof(FilterListsDbContext))]
+ [Migration("20180128204000_ExtractBaseEntityTypes")]
+ partial class ExtractBaseEntityTypes
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("MySql:ValueGenerationStrategy", MySqlValueGenerationStrategy.IdentityColumn)
+ .HasAnnotation("ProductVersion", "2.0.1-rtm-125");
+
+ modelBuilder.Entity("FilterLists.Data.Entities.FilterList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Description")
+ .HasColumnType("TEXT");
+
+ b.Property("DescriptionSourceUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("DiscontinuedDate");
+
+ b.Property("DonateUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("EmailAddress")
+ .HasColumnType("NVARCHAR(126)");
+
+ b.Property("ForumUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("HomeUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("IssuesUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("LicenseId");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126) NOT NULL");
+
+ b.Property("ScrapedDateUtc");
+
+ b.Property("SubmissionUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("SyntaxId");
+
+ b.Property("UpdatedDateUtc");
+
+ b.Property("ViewUrl")
+ .HasColumnType("TEXT NOT NULL");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LicenseId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("filterlists");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListLanguage", b =>
+ {
+ b.Property("FilterListId");
+
+ b.Property("LanguageId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("FilterListId", "LanguageId");
+
+ b.HasIndex("LanguageId");
+
+ b.ToTable("filterlists_languages");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListMaintainer", b =>
+ {
+ b.Property("FilterListId");
+
+ b.Property("MaintainerId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("FilterListId", "MaintainerId");
+
+ b.HasIndex("MaintainerId");
+
+ b.ToTable("filterlists_maintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListRule", b =>
+ {
+ b.Property("FilterListId");
+
+ b.Property("RuleId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("FilterListId", "RuleId");
+
+ b.HasIndex("RuleId");
+
+ b.ToTable("filterlists_rules");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Fork", b =>
+ {
+ b.Property("ForkFilterListId");
+
+ b.Property("UpstreamFilterListId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("ForkFilterListId", "UpstreamFilterListId");
+
+ b.HasIndex("UpstreamFilterListId");
+
+ b.ToTable("forks");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Merge", b =>
+ {
+ b.Property("MergeFilterListId");
+
+ b.Property("UpstreamFilterListId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("MergeFilterListId", "UpstreamFilterListId");
+
+ b.HasIndex("UpstreamFilterListId");
+
+ b.ToTable("merges");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SoftwareSyntax", b =>
+ {
+ b.Property("SoftwareId");
+
+ b.Property("SyntaxId");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.HasKey("SoftwareId", "SyntaxId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("software_syntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Language", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Iso6391")
+ .HasColumnType("NVARCHAR(2)");
+
+ b.Property("Iso6392")
+ .HasColumnType("NVARCHAR(3)");
+
+ b.Property("Iso6392B")
+ .HasColumnType("NVARCHAR(3)");
+
+ b.Property("Iso6392T")
+ .HasColumnType("NVARCHAR(3)");
+
+ b.Property("Iso6393")
+ .HasColumnType("NVARCHAR(3)");
+
+ b.Property("LocalName")
+ .HasColumnType("NVARCHAR(126)");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126)");
+
+ b.HasKey("Id");
+
+ b.ToTable("languages");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.License", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("DescriptionUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126) NOT NULL");
+
+ b.Property("PermissiveAdaptation");
+
+ b.Property("PermissiveCommercial");
+
+ b.HasKey("Id");
+
+ b.ToTable("licenses");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Maintainer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("EmailAddress")
+ .HasColumnType("NVARCHAR(126)");
+
+ b.Property("HomeUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126) NOT NULL");
+
+ b.Property("TwitterHandle")
+ .HasColumnType("NVARCHAR(126)");
+
+ b.HasKey("Id");
+
+ b.ToTable("maintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Rule", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("BIGINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Raw")
+ .HasColumnType("NVARCHAR(2083) NOT NULL");
+
+ b.HasKey("Id");
+
+ b.ToTable("rules");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Software", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("DownloadUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("HomeUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126) NOT NULL");
+
+ b.HasKey("Id");
+
+ b.ToTable("software");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Syntax", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("SMALLINT UNSIGNED");
+
+ b.Property("CreatedDateUtc")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("DefinitionUrl")
+ .HasColumnType("TEXT");
+
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
+ b.Property("Name")
+ .HasColumnType("NVARCHAR(126) NOT NULL");
+
+ b.HasKey("Id");
+
+ b.ToTable("syntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.FilterList", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.License")
+ .WithMany("FilterLists")
+ .HasForeignKey("LicenseId");
+
+ b.HasOne("FilterLists.Data.Entities.Syntax")
+ .WithMany("FilterLists")
+ .HasForeignKey("SyntaxId");
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListLanguage", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.Language", "Language")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("LanguageId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListMaintainer", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.Maintainer", "Maintainer")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("MaintainerId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.FilterListRule", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.FilterList", "FilterList")
+ .WithMany("FilterListRules")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.Rule", "Rule")
+ .WithMany("FilterListRules")
+ .HasForeignKey("RuleId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Fork", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.FilterList", "ForkFilterList")
+ .WithMany()
+ .HasForeignKey("ForkFilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.FilterList", "UpstreamFilterList")
+ .WithMany()
+ .HasForeignKey("UpstreamFilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.Merge", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.FilterList", "MergeFilterList")
+ .WithMany()
+ .HasForeignKey("MergeFilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.FilterList", "UpstreamFilterList")
+ .WithMany()
+ .HasForeignKey("UpstreamFilterListId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+
+ modelBuilder.Entity("FilterLists.Data.Entities.Junctions.SoftwareSyntax", b =>
+ {
+ b.HasOne("FilterLists.Data.Entities.Software", "Software")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SoftwareId")
+ .OnDelete(DeleteBehavior.Cascade);
+
+ b.HasOne("FilterLists.Data.Entities.Syntax", "Syntax")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SyntaxId")
+ .OnDelete(DeleteBehavior.Cascade);
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.cs b/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.cs
new file mode 100644
index 000000000..603d0e473
--- /dev/null
+++ b/src/FilterLists.Api/Migrations/20180128204000_ExtractBaseEntityTypes.cs
@@ -0,0 +1,25 @@
+using System;
+using Microsoft.EntityFrameworkCore.Migrations;
+
+namespace FilterLists.Api.Migrations
+{
+ public partial class ExtractBaseEntityTypes : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.AddColumn(
+ "ModifiedDateUtc",
+ "rules",
+ "TIMESTAMP",
+ nullable: false,
+ defaultValue: new DateTime(1, 1, 1, 0, 0, 0, 0, DateTimeKind.Unspecified));
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropColumn(
+ "ModifiedDateUtc",
+ "rules");
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs
index 4c4d78ead..3e79adaf4 100644
--- a/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs
+++ b/src/FilterLists.Api/Migrations/FilterListsDbContextModelSnapshot.cs
@@ -293,6 +293,10 @@ protected override void BuildModel(ModelBuilder modelBuilder)
.ValueGeneratedOnAdd()
.HasColumnType("TIMESTAMP");
+ b.Property("ModifiedDateUtc")
+ .ValueGeneratedOnAddOrUpdate()
+ .HasColumnType("TIMESTAMP");
+
b.Property("Raw")
.HasColumnType("NVARCHAR(2083) NOT NULL");
diff --git a/src/FilterLists.Data/Entities/BaseEntity.cs b/src/FilterLists.Data/Entities/BaseEntity.cs
new file mode 100644
index 000000000..cd3c7cca1
--- /dev/null
+++ b/src/FilterLists.Data/Entities/BaseEntity.cs
@@ -0,0 +1,11 @@
+using System;
+
+namespace FilterLists.Data.Entities
+{
+ public class BaseEntity
+ {
+ public int Id { get; set; }
+ public DateTime CreatedDateUtc { get; set; }
+ public DateTime ModifiedDateUtc { get; set; }
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Data/Entities/FilterList.cs b/src/FilterLists.Data/Entities/FilterList.cs
index b151e5d08..1bac029e0 100644
--- a/src/FilterLists.Data/Entities/FilterList.cs
+++ b/src/FilterLists.Data/Entities/FilterList.cs
@@ -4,12 +4,8 @@
namespace FilterLists.Data.Entities
{
- public class FilterList
+ public class FilterList : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string Description { get; set; }
public string DescriptionSourceUrl { get; set; }
public DateTime? DiscontinuedDate { get; set; }
diff --git a/src/FilterLists.Data/Entities/Language.cs b/src/FilterLists.Data/Entities/Language.cs
index 8ce4c8043..518344660 100644
--- a/src/FilterLists.Data/Entities/Language.cs
+++ b/src/FilterLists.Data/Entities/Language.cs
@@ -1,15 +1,10 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using FilterLists.Data.Entities.Junctions;
namespace FilterLists.Data.Entities
{
- public class Language
+ public class Language : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string Iso6391 { get; set; }
public string Iso6392 { get; set; }
public string Iso6392B { get; set; }
diff --git a/src/FilterLists.Data/Entities/License.cs b/src/FilterLists.Data/Entities/License.cs
index d36f5e58a..fecc22fce 100644
--- a/src/FilterLists.Data/Entities/License.cs
+++ b/src/FilterLists.Data/Entities/License.cs
@@ -1,14 +1,9 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
namespace FilterLists.Data.Entities
{
- public class License
+ public class License : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string DescriptionUrl { get; set; }
public ICollection FilterLists { get; set; }
public string Name { get; set; }
diff --git a/src/FilterLists.Data/Entities/Maintainer.cs b/src/FilterLists.Data/Entities/Maintainer.cs
index ecf64541d..344cb9bd6 100644
--- a/src/FilterLists.Data/Entities/Maintainer.cs
+++ b/src/FilterLists.Data/Entities/Maintainer.cs
@@ -1,15 +1,10 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using FilterLists.Data.Entities.Junctions;
namespace FilterLists.Data.Entities
{
- public class Maintainer
+ public class Maintainer : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string EmailAddress { get; set; }
public string HomeUrl { get; set; }
public string Name { get; set; }
diff --git a/src/FilterLists.Data/Entities/Rule.cs b/src/FilterLists.Data/Entities/Rule.cs
index 03c91ec22..f18f7e5c0 100644
--- a/src/FilterLists.Data/Entities/Rule.cs
+++ b/src/FilterLists.Data/Entities/Rule.cs
@@ -1,14 +1,10 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using FilterLists.Data.Entities.Junctions;
namespace FilterLists.Data.Entities
{
- public class Rule
+ public class Rule : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
-
public string Raw { get; set; }
public ICollection FilterListRules { get; set; }
diff --git a/src/FilterLists.Data/Entities/Software.cs b/src/FilterLists.Data/Entities/Software.cs
index 1651bad43..a4d75f64a 100644
--- a/src/FilterLists.Data/Entities/Software.cs
+++ b/src/FilterLists.Data/Entities/Software.cs
@@ -1,15 +1,10 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using FilterLists.Data.Entities.Junctions;
namespace FilterLists.Data.Entities
{
- public class Software
+ public class Software : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string DownloadUrl { get; set; }
public string HomeUrl { get; set; }
public string Name { get; set; }
diff --git a/src/FilterLists.Data/Entities/Syntax.cs b/src/FilterLists.Data/Entities/Syntax.cs
index f9ca4ed21..89ab38e2b 100644
--- a/src/FilterLists.Data/Entities/Syntax.cs
+++ b/src/FilterLists.Data/Entities/Syntax.cs
@@ -1,15 +1,10 @@
-using System;
-using System.Collections.Generic;
+using System.Collections.Generic;
using FilterLists.Data.Entities.Junctions;
namespace FilterLists.Data.Entities
{
- public class Syntax
+ public class Syntax : BaseEntity
{
- public int Id { get; set; }
- public DateTime CreatedDateUtc { get; set; }
- public DateTime ModifiedDateUtc { get; set; }
-
public string DefinitionUrl { get; set; }
public ICollection FilterLists { get; set; }
public string Name { get; set; }
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/BaseEntityTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/BaseEntityTypeConfiguration.cs
new file mode 100644
index 000000000..255c3c0e0
--- /dev/null
+++ b/src/FilterLists.Data/EntityTypeConfigurations/BaseEntityTypeConfiguration.cs
@@ -0,0 +1,21 @@
+using FilterLists.Data.Entities;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Metadata.Builders;
+
+namespace FilterLists.Data.EntityTypeConfigurations
+{
+ public class BaseEntityTypeConfiguration : IEntityTypeConfiguration where TEntity : BaseEntity
+ {
+ public virtual void Configure(EntityTypeBuilder entityTypeBuilder)
+ {
+ entityTypeBuilder.Property(x => x.Id)
+ .HasColumnType("SMALLINT UNSIGNED");
+ entityTypeBuilder.Property(x => x.CreatedDateUtc)
+ .HasColumnType("TIMESTAMP")
+ .ValueGeneratedOnAdd();
+ entityTypeBuilder.Property(x => x.ModifiedDateUtc)
+ .HasColumnType("TIMESTAMP")
+ .ValueGeneratedOnAddOrUpdate();
+ }
+ }
+}
\ No newline at end of file
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/FilterListTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/FilterListTypeConfiguration.cs
index a7896178f..903ec43cd 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/FilterListTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/FilterListTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class FilterListTypeConfiguration : IEntityTypeConfiguration
+ public class FilterListTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("filterlists");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("filterlists");
entityTypeBuilder.Property(x => x.Description)
.HasColumnType("TEXT");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfiguration.cs
similarity index 89%
rename from src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs
rename to src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfiguration.cs
index 9c9577815..56e871224 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfigurationBase.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/BaseJunctionTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class JunctionBaseTypeConfiguration : IEntityTypeConfiguration
+ public class BaseJunctionTypeConfiguration : IEntityTypeConfiguration
where TJunction : BaseJunction
{
public virtual void Configure(EntityTypeBuilder entityTypeBuilder)
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs
index 354ef7b44..7d9b5b8d2 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListLanguageTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class FilterListLanguageTypeConfiguration : JunctionBaseTypeConfiguration
+ public class FilterListLanguageTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs
index 2437321c7..0e5df61bb 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListMaintainerTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class FilterListMaintainerTypeConfiguration : JunctionBaseTypeConfiguration
+ public class FilterListMaintainerTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs
index d512577ab..debfa368b 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/FilterListRuleTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class FilterListRuleTypeConfiguration : JunctionBaseTypeConfiguration
+ public class FilterListRuleTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs
index 010c4f12c..baf37eb72 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/ForkTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class ForkTypeConfiguration : JunctionBaseTypeConfiguration
+ public class ForkTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs
index e5adfa706..a5b199801 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/MergeTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class MergeTypeConfiguration : JunctionBaseTypeConfiguration
+ public class MergeTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs
index 6f773e25e..b7b14638f 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/Junctions/SoftwareSyntaxTypeConfiguration.cs
@@ -4,7 +4,7 @@
namespace FilterLists.Data.EntityTypeConfigurations.Junctions
{
- public class SoftwareSyntaxTypeConfiguration : JunctionBaseTypeConfiguration
+ public class SoftwareSyntaxTypeConfiguration : BaseJunctionTypeConfiguration
{
public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/LanguageTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/LanguageTypeConfiguration.cs
index b149c042d..d5b26c02c 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/LanguageTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/LanguageTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class LanguageTypeConfiguration : IEntityTypeConfiguration
+ public class LanguageTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("languages");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("languages");
entityTypeBuilder.Property(x => x.Iso6391)
.HasColumnType("NVARCHAR(2)");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/LicenseTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/LicenseTypeConfiguration.cs
index cdbbb3ae3..060d80dc5 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/LicenseTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/LicenseTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class LicenseTypeConfiguration : IEntityTypeConfiguration
+ public class LicenseTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("licenses");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("licenses");
entityTypeBuilder.Property(x => x.DescriptionUrl)
.HasColumnType("TEXT");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/MaintainerTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/MaintainerTypeConfiguration.cs
index 35f2c4a24..037645572 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/MaintainerTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/MaintainerTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class MaintainerTypeConfiguration : IEntityTypeConfiguration
+ public class MaintainerTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("maintainers");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("maintainers");
entityTypeBuilder.Property(x => x.EmailAddress)
.HasColumnType("NVARCHAR(126)");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/RuleTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/RuleTypeConfiguration.cs
index 9d80b1a52..1a32bbee4 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/RuleTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/RuleTypeConfiguration.cs
@@ -4,17 +4,16 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class RuleTypeConfiguration : IEntityTypeConfiguration
+ public class RuleTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
+ base.Configure(entityTypeBuilder);
+
entityTypeBuilder.ToTable("rules");
entityTypeBuilder.Property(x => x.Id)
.HasColumnType("BIGINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
entityTypeBuilder.Property(x => x.Raw)
.HasColumnType("NVARCHAR(2083) NOT NULL");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/SoftwareTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/SoftwareTypeConfiguration.cs
index fc07b2dd5..a382e9e62 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/SoftwareTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/SoftwareTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class SoftwareTypeConfiguration : IEntityTypeConfiguration
+ public class SoftwareTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("software");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("software");
entityTypeBuilder.Property(x => x.DownloadUrl)
.HasColumnType("TEXT");
diff --git a/src/FilterLists.Data/EntityTypeConfigurations/SyntaxTypeConfiguration.cs b/src/FilterLists.Data/EntityTypeConfigurations/SyntaxTypeConfiguration.cs
index 2e76c03d2..512543c6f 100644
--- a/src/FilterLists.Data/EntityTypeConfigurations/SyntaxTypeConfiguration.cs
+++ b/src/FilterLists.Data/EntityTypeConfigurations/SyntaxTypeConfiguration.cs
@@ -4,20 +4,13 @@
namespace FilterLists.Data.EntityTypeConfigurations
{
- public class SyntaxTypeConfiguration : IEntityTypeConfiguration
+ public class SyntaxTypeConfiguration : BaseEntityTypeConfiguration
{
- public void Configure(EntityTypeBuilder entityTypeBuilder)
+ public override void Configure(EntityTypeBuilder entityTypeBuilder)
{
- entityTypeBuilder.ToTable("syntaxes");
+ base.Configure(entityTypeBuilder);
- entityTypeBuilder.Property(x => x.Id)
- .HasColumnType("SMALLINT UNSIGNED");
- entityTypeBuilder.Property(x => x.CreatedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAdd();
- entityTypeBuilder.Property(x => x.ModifiedDateUtc)
- .HasColumnType("TIMESTAMP")
- .ValueGeneratedOnAddOrUpdate();
+ entityTypeBuilder.ToTable("syntaxes");
entityTypeBuilder.Property(x => x.DefinitionUrl)
.HasColumnType("TEXT");