diff --git a/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj b/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
index 6fe06bd47..7436cfce6 100644
--- a/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
+++ b/directory/src/FilterLists.Directory.Api/FilterLists.Directory.Api.csproj
@@ -41,6 +41,7 @@
+
diff --git a/directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj b/directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj
index 43fea1cd3..80d1fff63 100644
--- a/directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj
+++ b/directory/src/FilterLists.Directory.Infrastructure.Migrations/FilterLists.Directory.Infrastructure.Migrations.csproj
@@ -27,4 +27,8 @@
+
+
+
+
\ No newline at end of file
diff --git a/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.Designer.cs b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.Designer.cs
new file mode 100644
index 000000000..58a544287
--- /dev/null
+++ b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.Designer.cs
@@ -0,0 +1,513 @@
+//
+
+using FilterLists.Directory.Infrastructure.Persistence.Queries.Context;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FilterLists.Directory.Infrastructure.Migrations.Migrations
+{
+ [DbContext(typeof(QueryDbContext))]
+ [Migration("20200824012903_Initial")]
+ partial class Initial
+ {
+ protected override void BuildTargetModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
+ .HasAnnotation("ProductVersion", "3.1.7")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b =>
+ {
+ b.Property("DependencyFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("DependentFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("DependencyFilterListId", "DependentFilterListId");
+
+ b.HasIndex("DependentFilterListId");
+
+ b.ToTable("Dependents");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("ChatUrl")
+ .HasColumnType("text");
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("DonateUrl")
+ .HasColumnType("text");
+
+ b.Property("EmailAddress")
+ .HasColumnType("text");
+
+ b.Property("ForumUrl")
+ .HasColumnType("text");
+
+ b.Property("HomeUrl")
+ .HasColumnType("text");
+
+ b.Property("IssuesUrl")
+ .HasColumnType("text");
+
+ b.Property("LicenseId")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OnionUrl")
+ .HasColumnType("text");
+
+ b.Property("PolicyUrl")
+ .HasColumnType("text");
+
+ b.Property("SubmissionUrl")
+ .HasColumnType("text");
+
+ b.Property("ViewUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LicenseId");
+
+ b.ToTable("FilterLists");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("LanguageIso6391")
+ .HasColumnType("text");
+
+ b.HasKey("FilterListId", "LanguageIso6391");
+
+ b.HasIndex("LanguageIso6391");
+
+ b.ToTable("FilterListLanguages");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("MaintainerId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "MaintainerId");
+
+ b.HasIndex("MaintainerId");
+
+ b.ToTable("FilterListMaintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("SyntaxId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "SyntaxId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("FilterListSyntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("TagId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "TagId");
+
+ b.HasIndex("TagId");
+
+ b.ToTable("FilterListTags");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b =>
+ {
+ b.Property("UpstreamFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("ForkFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("UpstreamFilterListId", "ForkFilterListId");
+
+ b.HasIndex("ForkFilterListId");
+
+ b.ToTable("Forks");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b =>
+ {
+ b.Property("Iso6391")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Iso6391");
+
+ b.ToTable("Languages");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("GitHubKey")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Licenses");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("EmailAddress")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TwitterHandle")
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Maintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b =>
+ {
+ b.Property("IncludedInFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("IncludesFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("IncludedInFilterListId", "IncludesFilterListId");
+
+ b.HasIndex("IncludesFilterListId");
+
+ b.ToTable("Merges");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("DownloadUrl")
+ .HasColumnType("text");
+
+ b.Property("HomeUrl")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SupportsAbpUrlScheme")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("Software");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b =>
+ {
+ b.Property("SoftwareId")
+ .HasColumnType("integer");
+
+ b.Property("SyntaxId")
+ .HasColumnType("integer");
+
+ b.HasKey("SoftwareId", "SyntaxId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("SoftwareSyntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Syntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Tags");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlMirror", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FilterListId");
+
+ b.ToTable("ViewUrlMirrors");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlPartial", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("Position")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("FilterListId", "Position");
+
+ b.ToTable("ViewUrlPartials");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependencyFilterList")
+ .WithMany("DependencyFilterLists")
+ .HasForeignKey("DependencyFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependentFilterList")
+ .WithMany("DependentFilterLists")
+ .HasForeignKey("DependentFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License")
+ .WithMany("FilterLists")
+ .HasForeignKey("LicenseId");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", "Language")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("LanguageIso6391")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", "Maintainer")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("MaintainerId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListSyntaxes")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax")
+ .WithMany("FilterListSyntaxes")
+ .HasForeignKey("SyntaxId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListTags")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", "Tag")
+ .WithMany("FilterListTags")
+ .HasForeignKey("TagId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList")
+ .WithMany("ForkFilterLists")
+ .HasForeignKey("ForkFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "UpstreamFilterList")
+ .WithMany("UpstreamFilterLists")
+ .HasForeignKey("UpstreamFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludedInFilterList")
+ .WithMany("IncludedInFilterLists")
+ .HasForeignKey("IncludedInFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludesFilterList")
+ .WithMany("IncludesFilterLists")
+ .HasForeignKey("IncludesFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", "Software")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SoftwareId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SyntaxId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlMirror", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("ViewUrlMirrors")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlPartial", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("ViewUrlPartials")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.cs b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.cs
new file mode 100644
index 000000000..2bc25e483
--- /dev/null
+++ b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200824012903_Initial.cs
@@ -0,0 +1,466 @@
+using Microsoft.EntityFrameworkCore.Migrations;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FilterLists.Directory.Infrastructure.Migrations.Migrations
+{
+ public partial class Initial : Migration
+ {
+ protected override void Up(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.CreateTable(
+ name: "Languages",
+ columns: table => new
+ {
+ Iso6391 = table.Column(nullable: false),
+ Name = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Languages", x => x.Iso6391);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Licenses",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ GitHubKey = table.Column(nullable: true),
+ Url = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Licenses", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Maintainers",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ Url = table.Column(nullable: true),
+ EmailAddress = table.Column(nullable: true),
+ TwitterHandle = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Maintainers", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Software",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ Description = table.Column(nullable: true),
+ HomeUrl = table.Column(nullable: true),
+ DownloadUrl = table.Column(nullable: true),
+ SupportsAbpUrlScheme = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Software", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Syntaxes",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ Description = table.Column(nullable: true),
+ Url = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Syntaxes", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Tags",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ Description = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Tags", x => x.Id);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "FilterLists",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ Name = table.Column(nullable: false),
+ Description = table.Column(nullable: true),
+ LicenseId = table.Column(nullable: true),
+ ViewUrl = table.Column(nullable: false),
+ HomeUrl = table.Column(nullable: true),
+ OnionUrl = table.Column(nullable: true),
+ PolicyUrl = table.Column(nullable: true),
+ SubmissionUrl = table.Column(nullable: true),
+ IssuesUrl = table.Column(nullable: true),
+ ForumUrl = table.Column(nullable: true),
+ ChatUrl = table.Column(nullable: true),
+ EmailAddress = table.Column(nullable: true),
+ DonateUrl = table.Column(nullable: true)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_FilterLists", x => x.Id);
+ table.ForeignKey(
+ name: "FK_FilterLists_Licenses_LicenseId",
+ column: x => x.LicenseId,
+ principalTable: "Licenses",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Restrict);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "SoftwareSyntaxes",
+ columns: table => new
+ {
+ SoftwareId = table.Column(nullable: false),
+ SyntaxId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_SoftwareSyntaxes", x => new { x.SoftwareId, x.SyntaxId });
+ table.ForeignKey(
+ name: "FK_SoftwareSyntaxes_Software_SoftwareId",
+ column: x => x.SoftwareId,
+ principalTable: "Software",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_SoftwareSyntaxes_Syntaxes_SyntaxId",
+ column: x => x.SyntaxId,
+ principalTable: "Syntaxes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Dependents",
+ columns: table => new
+ {
+ DependencyFilterListId = table.Column(nullable: false),
+ DependentFilterListId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Dependents", x => new { x.DependencyFilterListId, x.DependentFilterListId });
+ table.ForeignKey(
+ name: "FK_Dependents_FilterLists_DependencyFilterListId",
+ column: x => x.DependencyFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Dependents_FilterLists_DependentFilterListId",
+ column: x => x.DependentFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "FilterListLanguages",
+ columns: table => new
+ {
+ FilterListId = table.Column(nullable: false),
+ LanguageIso6391 = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_FilterListLanguages", x => new { x.FilterListId, x.LanguageIso6391 });
+ table.ForeignKey(
+ name: "FK_FilterListLanguages_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_FilterListLanguages_Languages_LanguageIso6391",
+ column: x => x.LanguageIso6391,
+ principalTable: "Languages",
+ principalColumn: "Iso6391",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "FilterListMaintainers",
+ columns: table => new
+ {
+ FilterListId = table.Column(nullable: false),
+ MaintainerId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_FilterListMaintainers", x => new { x.FilterListId, x.MaintainerId });
+ table.ForeignKey(
+ name: "FK_FilterListMaintainers_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_FilterListMaintainers_Maintainers_MaintainerId",
+ column: x => x.MaintainerId,
+ principalTable: "Maintainers",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "FilterListSyntaxes",
+ columns: table => new
+ {
+ FilterListId = table.Column(nullable: false),
+ SyntaxId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_FilterListSyntaxes", x => new { x.FilterListId, x.SyntaxId });
+ table.ForeignKey(
+ name: "FK_FilterListSyntaxes_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_FilterListSyntaxes_Syntaxes_SyntaxId",
+ column: x => x.SyntaxId,
+ principalTable: "Syntaxes",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "FilterListTags",
+ columns: table => new
+ {
+ FilterListId = table.Column(nullable: false),
+ TagId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_FilterListTags", x => new { x.FilterListId, x.TagId });
+ table.ForeignKey(
+ name: "FK_FilterListTags_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_FilterListTags_Tags_TagId",
+ column: x => x.TagId,
+ principalTable: "Tags",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Forks",
+ columns: table => new
+ {
+ UpstreamFilterListId = table.Column(nullable: false),
+ ForkFilterListId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Forks", x => new { x.UpstreamFilterListId, x.ForkFilterListId });
+ table.ForeignKey(
+ name: "FK_Forks_FilterLists_ForkFilterListId",
+ column: x => x.ForkFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Forks_FilterLists_UpstreamFilterListId",
+ column: x => x.UpstreamFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "Merges",
+ columns: table => new
+ {
+ IncludedInFilterListId = table.Column(nullable: false),
+ IncludesFilterListId = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_Merges", x => new { x.IncludedInFilterListId, x.IncludesFilterListId });
+ table.ForeignKey(
+ name: "FK_Merges_FilterLists_IncludedInFilterListId",
+ column: x => x.IncludedInFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ table.ForeignKey(
+ name: "FK_Merges_FilterLists_IncludesFilterListId",
+ column: x => x.IncludesFilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ViewUrlMirrors",
+ columns: table => new
+ {
+ Id = table.Column(nullable: false)
+ .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn),
+ FilterListId = table.Column(nullable: false),
+ Url = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ViewUrlMirrors", x => x.Id);
+ table.ForeignKey(
+ name: "FK_ViewUrlMirrors_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateTable(
+ name: "ViewUrlPartials",
+ columns: table => new
+ {
+ Position = table.Column(nullable: false),
+ FilterListId = table.Column(nullable: false),
+ Url = table.Column(nullable: false)
+ },
+ constraints: table =>
+ {
+ table.PrimaryKey("PK_ViewUrlPartials", x => new { x.FilterListId, x.Position });
+ table.ForeignKey(
+ name: "FK_ViewUrlPartials_FilterLists_FilterListId",
+ column: x => x.FilterListId,
+ principalTable: "FilterLists",
+ principalColumn: "Id",
+ onDelete: ReferentialAction.Cascade);
+ });
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Dependents_DependentFilterListId",
+ table: "Dependents",
+ column: "DependentFilterListId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_FilterListLanguages_LanguageIso6391",
+ table: "FilterListLanguages",
+ column: "LanguageIso6391");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_FilterListMaintainers_MaintainerId",
+ table: "FilterListMaintainers",
+ column: "MaintainerId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_FilterLists_LicenseId",
+ table: "FilterLists",
+ column: "LicenseId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_FilterListSyntaxes_SyntaxId",
+ table: "FilterListSyntaxes",
+ column: "SyntaxId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_FilterListTags_TagId",
+ table: "FilterListTags",
+ column: "TagId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Forks_ForkFilterListId",
+ table: "Forks",
+ column: "ForkFilterListId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_Merges_IncludesFilterListId",
+ table: "Merges",
+ column: "IncludesFilterListId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_SoftwareSyntaxes_SyntaxId",
+ table: "SoftwareSyntaxes",
+ column: "SyntaxId");
+
+ migrationBuilder.CreateIndex(
+ name: "IX_ViewUrlMirrors_FilterListId",
+ table: "ViewUrlMirrors",
+ column: "FilterListId");
+ }
+
+ protected override void Down(MigrationBuilder migrationBuilder)
+ {
+ migrationBuilder.DropTable(
+ name: "Dependents");
+
+ migrationBuilder.DropTable(
+ name: "FilterListLanguages");
+
+ migrationBuilder.DropTable(
+ name: "FilterListMaintainers");
+
+ migrationBuilder.DropTable(
+ name: "FilterListSyntaxes");
+
+ migrationBuilder.DropTable(
+ name: "FilterListTags");
+
+ migrationBuilder.DropTable(
+ name: "Forks");
+
+ migrationBuilder.DropTable(
+ name: "Merges");
+
+ migrationBuilder.DropTable(
+ name: "SoftwareSyntaxes");
+
+ migrationBuilder.DropTable(
+ name: "ViewUrlMirrors");
+
+ migrationBuilder.DropTable(
+ name: "ViewUrlPartials");
+
+ migrationBuilder.DropTable(
+ name: "Languages");
+
+ migrationBuilder.DropTable(
+ name: "Maintainers");
+
+ migrationBuilder.DropTable(
+ name: "Tags");
+
+ migrationBuilder.DropTable(
+ name: "Software");
+
+ migrationBuilder.DropTable(
+ name: "Syntaxes");
+
+ migrationBuilder.DropTable(
+ name: "FilterLists");
+
+ migrationBuilder.DropTable(
+ name: "Licenses");
+ }
+ }
+}
diff --git a/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs
new file mode 100644
index 000000000..60f96ef33
--- /dev/null
+++ b/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs
@@ -0,0 +1,511 @@
+//
+
+using FilterLists.Directory.Infrastructure.Persistence.Queries.Context;
+using Microsoft.EntityFrameworkCore;
+using Microsoft.EntityFrameworkCore.Infrastructure;
+using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata;
+
+namespace FilterLists.Directory.Infrastructure.Migrations.Migrations
+{
+ [DbContext(typeof(QueryDbContext))]
+ partial class QueryDbContextModelSnapshot : ModelSnapshot
+ {
+ protected override void BuildModel(ModelBuilder modelBuilder)
+ {
+#pragma warning disable 612, 618
+ modelBuilder
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn)
+ .HasAnnotation("ProductVersion", "3.1.7")
+ .HasAnnotation("Relational:MaxIdentifierLength", 63);
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b =>
+ {
+ b.Property("DependencyFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("DependentFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("DependencyFilterListId", "DependentFilterListId");
+
+ b.HasIndex("DependentFilterListId");
+
+ b.ToTable("Dependents");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("ChatUrl")
+ .HasColumnType("text");
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("DonateUrl")
+ .HasColumnType("text");
+
+ b.Property("EmailAddress")
+ .HasColumnType("text");
+
+ b.Property("ForumUrl")
+ .HasColumnType("text");
+
+ b.Property("HomeUrl")
+ .HasColumnType("text");
+
+ b.Property("IssuesUrl")
+ .HasColumnType("text");
+
+ b.Property("LicenseId")
+ .HasColumnType("integer");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("OnionUrl")
+ .HasColumnType("text");
+
+ b.Property("PolicyUrl")
+ .HasColumnType("text");
+
+ b.Property("SubmissionUrl")
+ .HasColumnType("text");
+
+ b.Property("ViewUrl")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("LicenseId");
+
+ b.ToTable("FilterLists");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("LanguageIso6391")
+ .HasColumnType("text");
+
+ b.HasKey("FilterListId", "LanguageIso6391");
+
+ b.HasIndex("LanguageIso6391");
+
+ b.ToTable("FilterListLanguages");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("MaintainerId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "MaintainerId");
+
+ b.HasIndex("MaintainerId");
+
+ b.ToTable("FilterListMaintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("SyntaxId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "SyntaxId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("FilterListSyntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("TagId")
+ .HasColumnType("integer");
+
+ b.HasKey("FilterListId", "TagId");
+
+ b.HasIndex("TagId");
+
+ b.ToTable("FilterListTags");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b =>
+ {
+ b.Property("UpstreamFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("ForkFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("UpstreamFilterListId", "ForkFilterListId");
+
+ b.HasIndex("ForkFilterListId");
+
+ b.ToTable("Forks");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b =>
+ {
+ b.Property("Iso6391")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Iso6391");
+
+ b.ToTable("Languages");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("GitHubKey")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Licenses");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("EmailAddress")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("TwitterHandle")
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Maintainers");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b =>
+ {
+ b.Property("IncludedInFilterListId")
+ .HasColumnType("integer");
+
+ b.Property("IncludesFilterListId")
+ .HasColumnType("integer");
+
+ b.HasKey("IncludedInFilterListId", "IncludesFilterListId");
+
+ b.HasIndex("IncludesFilterListId");
+
+ b.ToTable("Merges");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("DownloadUrl")
+ .HasColumnType("text");
+
+ b.Property("HomeUrl")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("SupportsAbpUrlScheme")
+ .HasColumnType("boolean");
+
+ b.HasKey("Id");
+
+ b.ToTable("Software");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b =>
+ {
+ b.Property("SoftwareId")
+ .HasColumnType("integer");
+
+ b.Property("SyntaxId")
+ .HasColumnType("integer");
+
+ b.HasKey("SoftwareId", "SyntaxId");
+
+ b.HasIndex("SyntaxId");
+
+ b.ToTable("SoftwareSyntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.Property("Url")
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Syntaxes");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("Description")
+ .HasColumnType("text");
+
+ b.Property("Name")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.ToTable("Tags");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlMirror", b =>
+ {
+ b.Property("Id")
+ .ValueGeneratedOnAdd()
+ .HasColumnType("integer")
+ .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn);
+
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("Id");
+
+ b.HasIndex("FilterListId");
+
+ b.ToTable("ViewUrlMirrors");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlPartial", b =>
+ {
+ b.Property("FilterListId")
+ .HasColumnType("integer");
+
+ b.Property("Position")
+ .HasColumnType("integer");
+
+ b.Property("Url")
+ .IsRequired()
+ .HasColumnType("text");
+
+ b.HasKey("FilterListId", "Position");
+
+ b.ToTable("ViewUrlPartials");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependencyFilterList")
+ .WithMany("DependencyFilterLists")
+ .HasForeignKey("DependencyFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependentFilterList")
+ .WithMany("DependentFilterLists")
+ .HasForeignKey("DependentFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License")
+ .WithMany("FilterLists")
+ .HasForeignKey("LicenseId");
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", "Language")
+ .WithMany("FilterListLanguages")
+ .HasForeignKey("LanguageIso6391")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", "Maintainer")
+ .WithMany("FilterListMaintainers")
+ .HasForeignKey("MaintainerId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListSyntaxes")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax")
+ .WithMany("FilterListSyntaxes")
+ .HasForeignKey("SyntaxId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("FilterListTags")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", "Tag")
+ .WithMany("FilterListTags")
+ .HasForeignKey("TagId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList")
+ .WithMany("ForkFilterLists")
+ .HasForeignKey("ForkFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "UpstreamFilterList")
+ .WithMany("UpstreamFilterLists")
+ .HasForeignKey("UpstreamFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludedInFilterList")
+ .WithMany("IncludedInFilterLists")
+ .HasForeignKey("IncludedInFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludesFilterList")
+ .WithMany("IncludesFilterLists")
+ .HasForeignKey("IncludesFilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", "Software")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SoftwareId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax")
+ .WithMany("SoftwareSyntaxes")
+ .HasForeignKey("SyntaxId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlMirror", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("ViewUrlMirrors")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+
+ modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.ViewUrlPartial", b =>
+ {
+ b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList")
+ .WithMany("ViewUrlPartials")
+ .HasForeignKey("FilterListId")
+ .OnDelete(DeleteBehavior.Cascade)
+ .IsRequired();
+ });
+#pragma warning restore 612, 618
+ }
+ }
+}
diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Context/QueryDbContext.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Context/QueryDbContext.cs
index 15812b25b..859d3f9a4 100644
--- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Context/QueryDbContext.cs
+++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Context/QueryDbContext.cs
@@ -6,7 +6,7 @@
namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Context
{
- internal class QueryDbContext : DbContext
+ public class QueryDbContext : DbContext
{
public QueryDbContext(DbContextOptions options) : base(options)
{
diff --git a/directory/src/FilterLists.Directory.Infrastructure/ServiceRegistrationExtension.cs b/directory/src/FilterLists.Directory.Infrastructure/ServiceRegistrationExtension.cs
index 2712980de..661fe24a3 100644
--- a/directory/src/FilterLists.Directory.Infrastructure/ServiceRegistrationExtension.cs
+++ b/directory/src/FilterLists.Directory.Infrastructure/ServiceRegistrationExtension.cs
@@ -10,7 +10,8 @@ public static class ServiceRegistrationExtension
public static void AddInfrastructureServices(this IServiceCollection services, IConfiguration configuration)
{
services.AddDbContextPool(o =>
- o.UseNpgsql(configuration.GetConnectionString("DirectoryConnection")));
+ o.UseNpgsql(configuration.GetConnectionString("DirectoryConnection"),
+ po => po.MigrationsAssembly("FilterLists.Directory.Infrastructure.Migrations")));
services.AddScoped();
}
}