From 7bd2c8271950619914bed9e55e66c6804196b51f Mon Sep 17 00:00:00 2001 From: "Collin M. Barrett" Date: Sun, 7 May 2023 14:02:48 -0500 Subject: [PATCH] =?UTF-8?q?refactor(db):=20=E2=99=BB=EF=B8=8F=20re-create?= =?UTF-8?q?=20initial=20schema=20migration?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../SeedQueryDbContextTest.cs | 2 +- .../20230507190214_InitialCreate.Designer.cs | 942 ++++++++++++++++++ .../20230507190214_InitialCreate.cs | 623 ++++++++++++ .../Migrations/QueryDbContextModelSnapshot.cs | 939 +++++++++++++++++ 4 files changed, 2505 insertions(+), 1 deletion(-) create mode 100644 services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.Designer.cs create mode 100644 services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.cs create mode 100644 services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs diff --git a/services/Directory/FilterLists.Directory.Infrastructure.Migrations.Tests/SeedQueryDbContextTest.cs b/services/Directory/FilterLists.Directory.Infrastructure.Migrations.Tests/SeedQueryDbContextTest.cs index b21688cd8..9925077aa 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure.Migrations.Tests/SeedQueryDbContextTest.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure.Migrations.Tests/SeedQueryDbContextTest.cs @@ -15,7 +15,7 @@ public async Task Migrate_DoesNotThrowException() var connString = Environment.GetEnvironmentVariable("ConnectionStrings__DirectoryConnection") ?? throw new Exception(); var options = new DbContextOptionsBuilder() - .UseNpgsql(connString, m => m.MigrationsAssembly(typeof(Initial).Assembly.GetName().Name)) + .UseNpgsql(connString, m => m.MigrationsAssembly(typeof(InitialCreate).Assembly.GetName().Name)) .EnableSensitiveDataLogging() .Options; await using var context = new QueryDbContext(options); diff --git a/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.Designer.cs b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.Designer.cs new file mode 100644 index 000000000..6b2485eb9 --- /dev/null +++ b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.Designer.cs @@ -0,0 +1,942 @@ +// +using System; +using System.Text.Json; +using FilterLists.Directory.Domain.Aggregates; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Migrations; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace FilterLists.Directory.Infrastructure.Migrations.Migrations +{ + [DbContext(typeof(QueryDbContext))] + [Migration("20230507190214_InitialCreate")] + partial class InitialCreate + { + /// + protected override void BuildTargetModel(ModelBuilder modelBuilder) + { +#pragma warning disable 612, 618 + modelBuilder + .HasAnnotation("ProductVersion", "7.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "aggregate_type", new[] { "filter_list", "language", "license", "maintainer", "software", "syntax", "tag" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.HasSequence("EntityFrameworkHiLoSequence-FilterListViewUrl") + .StartsAt(3000L) + .IncrementsBy(3); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Change", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("After") + .HasColumnType("jsonb") + .HasColumnName("after"); + + b.Property("AggregateType") + .HasColumnType("aggregate_type") + .HasColumnName("aggregate_type"); + + b.Property("ApprovedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("approved_at"); + + b.Property("Before") + .HasColumnType("jsonb") + .HasColumnName("before"); + + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("LanguageId") + .HasColumnType("bigint") + .HasColumnName("language_id"); + + b.Property("LicenseId") + .HasColumnType("bigint") + .HasColumnName("license_id"); + + b.Property("MaintainerId") + .HasColumnType("bigint") + .HasColumnName("maintainer_id"); + + b.Property("Reason") + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RejectedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("rejected_at"); + + b.Property("RejectedReason") + .HasColumnType("text") + .HasColumnName("rejected_reason"); + + b.Property("SoftwareId") + .HasColumnType("bigint") + .HasColumnName("software_id"); + + b.Property("SubmittedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("submitted_at") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.Property("TagId") + .HasColumnType("bigint") + .HasColumnName("tag_id"); + + b.HasKey("Id") + .HasName("pk_changes"); + + b.HasIndex("FilterListId") + .HasDatabaseName("ix_changes_filter_list_id"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_changes_language_id"); + + b.HasIndex("LicenseId") + .HasDatabaseName("ix_changes_license_id"); + + b.HasIndex("MaintainerId") + .HasDatabaseName("ix_changes_maintainer_id"); + + b.HasIndex("SoftwareId") + .HasDatabaseName("ix_changes_software_id"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_changes_syntax_id"); + + b.HasIndex("TagId") + .HasDatabaseName("ix_changes_tag_id"); + + b.ToTable("changes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b => + { + b.Property("DependencyFilterListId") + .HasColumnType("bigint") + .HasColumnName("dependency_filter_list_id"); + + b.Property("DependentFilterListId") + .HasColumnType("bigint") + .HasColumnName("dependent_filter_list_id"); + + b.HasKey("DependencyFilterListId", "DependentFilterListId") + .HasName("pk_dependents"); + + b.HasIndex("DependentFilterListId") + .HasDatabaseName("ix_dependents_dependent_filter_list_id"); + + b.ToTable("dependents", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChatUrl") + .HasColumnType("text") + .HasColumnName("chat_url"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("DonateUrl") + .HasColumnType("text") + .HasColumnName("donate_url"); + + b.Property("EmailAddress") + .HasColumnType("text") + .HasColumnName("email_address"); + + b.Property("ForumUrl") + .HasColumnType("text") + .HasColumnName("forum_url"); + + b.Property("HomeUrl") + .HasColumnType("text") + .HasColumnName("home_url"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("IssuesUrl") + .HasColumnType("text") + .HasColumnName("issues_url"); + + b.Property("LicenseId") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasDefaultValue(5L) + .HasColumnName("license_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("OnionUrl") + .HasColumnType("text") + .HasColumnName("onion_url"); + + b.Property("PolicyUrl") + .HasColumnType("text") + .HasColumnName("policy_url"); + + b.Property("SubmissionUrl") + .HasColumnType("text") + .HasColumnName("submission_url"); + + b.HasKey("Id") + .HasName("pk_filter_lists"); + + b.HasIndex("LicenseId") + .HasDatabaseName("ix_filter_lists_license_id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_filter_lists_name"); + + b.ToTable("filter_lists", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("LanguageId") + .HasColumnType("bigint") + .HasColumnName("language_id"); + + b.HasKey("FilterListId", "LanguageId") + .HasName("pk_filter_list_languages"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_filter_list_languages_language_id"); + + b.ToTable("filter_list_languages", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("MaintainerId") + .HasColumnType("bigint") + .HasColumnName("maintainer_id"); + + b.HasKey("FilterListId", "MaintainerId") + .HasName("pk_filter_list_maintainers"); + + b.HasIndex("MaintainerId") + .HasDatabaseName("ix_filter_list_maintainers_maintainer_id"); + + b.ToTable("filter_list_maintainers", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.HasKey("FilterListId", "SyntaxId") + .HasName("pk_filter_list_syntaxes"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_filter_list_syntaxes_syntax_id"); + + b.ToTable("filter_list_syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("TagId") + .HasColumnType("bigint") + .HasColumnName("tag_id"); + + b.HasKey("FilterListId", "TagId") + .HasName("pk_filter_list_tags"); + + b.HasIndex("TagId") + .HasDatabaseName("ix_filter_list_tags_tag_id"); + + b.ToTable("filter_list_tags", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => + { + b.Property("UpstreamFilterListId") + .HasColumnType("bigint") + .HasColumnName("upstream_filter_list_id"); + + b.Property("ForkFilterListId") + .HasColumnType("bigint") + .HasColumnName("fork_filter_list_id"); + + b.HasKey("UpstreamFilterListId", "ForkFilterListId") + .HasName("pk_forks"); + + b.HasIndex("ForkFilterListId") + .HasDatabaseName("ix_forks_fork_filter_list_id"); + + b.ToTable("forks", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Iso6391") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("character(2)") + .HasColumnName("iso6391") + .IsFixedLength(); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_languages"); + + b.HasIndex("Iso6391") + .IsUnique() + .HasDatabaseName("ix_languages_iso6391"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_languages_name"); + + b.ToTable("languages", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("PermitsCommercialUse") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_commercial_use"); + + b.Property("PermitsDistribution") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_distribution"); + + b.Property("PermitsModification") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_modification"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_licenses"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_licenses_name"); + + b.ToTable("licenses", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EmailAddress") + .HasColumnType("text") + .HasColumnName("email_address"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("TwitterHandle") + .HasColumnType("text") + .HasColumnName("twitter_handle"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_maintainers"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_maintainers_name"); + + b.ToTable("maintainers", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b => + { + b.Property("IncludedInFilterListId") + .HasColumnType("bigint") + .HasColumnName("included_in_filter_list_id"); + + b.Property("IncludesFilterListId") + .HasColumnType("bigint") + .HasColumnName("includes_filter_list_id"); + + b.HasKey("IncludedInFilterListId", "IncludesFilterListId") + .HasName("pk_merges"); + + b.HasIndex("IncludesFilterListId") + .HasDatabaseName("ix_merges_includes_filter_list_id"); + + b.ToTable("merges", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("DownloadUrl") + .HasColumnType("text") + .HasColumnName("download_url"); + + b.Property("HomeUrl") + .HasColumnType("text") + .HasColumnName("home_url"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("SupportsAbpUrlScheme") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("supports_abp_url_scheme"); + + b.HasKey("Id") + .HasName("pk_software"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_software_name"); + + b.ToTable("software", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b => + { + b.Property("SoftwareId") + .HasColumnType("bigint") + .HasColumnName("software_id"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.HasKey("SoftwareId", "SyntaxId") + .HasName("pk_software_syntaxes"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_software_syntaxes_syntax_id"); + + b.ToTable("software_syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_syntaxes"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_syntaxes_name"); + + b.ToTable("syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_tags"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_tags_name"); + + b.ToTable("tags", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Change", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", null) + .WithMany("Changes") + .HasForeignKey("FilterListId") + .HasConstraintName("fk_changes_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", null) + .WithMany("Changes") + .HasForeignKey("LanguageId") + .HasConstraintName("fk_changes_languages_language_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", null) + .WithMany("Changes") + .HasForeignKey("LicenseId") + .HasConstraintName("fk_changes_licenses_license_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", null) + .WithMany("Changes") + .HasForeignKey("MaintainerId") + .HasConstraintName("fk_changes_maintainers_maintainer_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", null) + .WithMany("Changes") + .HasForeignKey("SoftwareId") + .HasConstraintName("fk_changes_software_software_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", null) + .WithMany("Changes") + .HasForeignKey("SyntaxId") + .HasConstraintName("fk_changes_syntaxes_syntax_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", null) + .WithMany("Changes") + .HasForeignKey("TagId") + .HasConstraintName("fk_changes_tags_tag_id"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependencyFilterList") + .WithMany("DependentFilterLists") + .HasForeignKey("DependencyFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_dependents_filter_lists_dependency_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependentFilterList") + .WithMany("DependencyFilterLists") + .HasForeignKey("DependentFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_dependents_filter_lists_dependent_filter_list_id"); + + b.Navigation("DependencyFilterList"); + + b.Navigation("DependentFilterList"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License") + .WithMany("FilterLists") + .HasForeignKey("LicenseId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired() + .HasConstraintName("fk_filter_lists_licenses_license_id"); + + b.OwnsMany("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", "ViewUrls", b1 => + { + b1.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseHiLo(b1.Property("Id"), "EntityFrameworkHiLoSequence-FilterListViewUrl"); + + b1.Property("Primariness") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1) + .HasColumnName("primariness"); + + b1.Property("SegmentNumber") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1) + .HasColumnName("segment_number"); + + b1.Property("Url") + .IsRequired() + .HasColumnType("text") + .HasColumnName("url"); + + b1.HasKey("FilterListId", "Id") + .HasName("pk_filter_list_view_urls"); + + b1.HasIndex("FilterListId", "SegmentNumber", "Primariness") + .IsUnique() + .HasDatabaseName("ix_filter_list_view_urls_filter_list_id_segment_number_primari"); + + b1.ToTable("filter_list_view_urls", (string)null); + + b1.WithOwner("FilterList") + .HasForeignKey("FilterListId") + .HasConstraintName("fk_filter_list_view_urls_filter_lists_filter_list_id"); + + b1.Navigation("FilterList"); + }); + + b.Navigation("License"); + + b.Navigation("ViewUrls"); + }); + + 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() + .HasConstraintName("fk_filter_list_languages_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", "Language") + .WithMany("FilterListLanguages") + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_languages_languages_language_id"); + + b.Navigation("FilterList"); + + b.Navigation("Language"); + }); + + 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() + .HasConstraintName("fk_filter_list_maintainers_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", "Maintainer") + .WithMany("FilterListMaintainers") + .HasForeignKey("MaintainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_maintainers_maintainers_maintainer_id"); + + b.Navigation("FilterList"); + + b.Navigation("Maintainer"); + }); + + 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() + .HasConstraintName("fk_filter_list_syntaxes_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax") + .WithMany("FilterListSyntaxes") + .HasForeignKey("SyntaxId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_syntaxes_syntaxes_syntax_id"); + + b.Navigation("FilterList"); + + b.Navigation("Syntax"); + }); + + 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() + .HasConstraintName("fk_filter_list_tags_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", "Tag") + .WithMany("FilterListTags") + .HasForeignKey("TagId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_tags_tags_tag_id"); + + b.Navigation("FilterList"); + + b.Navigation("Tag"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList") + .WithMany("UpstreamFilterLists") + .HasForeignKey("ForkFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_forks_filter_lists_fork_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "UpstreamFilterList") + .WithMany("ForkFilterLists") + .HasForeignKey("UpstreamFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_forks_filter_lists_upstream_filter_list_id"); + + b.Navigation("ForkFilterList"); + + b.Navigation("UpstreamFilterList"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludedInFilterList") + .WithMany("IncludesFilterLists") + .HasForeignKey("IncludedInFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_merges_filter_lists_included_in_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludesFilterList") + .WithMany("IncludedInFilterLists") + .HasForeignKey("IncludesFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_merges_filter_lists_includes_filter_list_id"); + + b.Navigation("IncludedInFilterList"); + + b.Navigation("IncludesFilterList"); + }); + + 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() + .HasConstraintName("fk_software_syntaxes_software_software_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax") + .WithMany("SoftwareSyntaxes") + .HasForeignKey("SyntaxId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_software_syntaxes_syntaxes_syntax_id"); + + b.Navigation("Software"); + + b.Navigation("Syntax"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.Navigation("Changes"); + + b.Navigation("DependencyFilterLists"); + + b.Navigation("DependentFilterLists"); + + b.Navigation("FilterListLanguages"); + + b.Navigation("FilterListMaintainers"); + + b.Navigation("FilterListSyntaxes"); + + b.Navigation("FilterListTags"); + + b.Navigation("ForkFilterLists"); + + b.Navigation("IncludedInFilterLists"); + + b.Navigation("IncludesFilterLists"); + + b.Navigation("UpstreamFilterLists"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListLanguages"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterLists"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListMaintainers"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b => + { + b.Navigation("Changes"); + + b.Navigation("SoftwareSyntaxes"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListSyntaxes"); + + b.Navigation("SoftwareSyntaxes"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListTags"); + }); +#pragma warning restore 612, 618 + } + } +} diff --git a/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.cs b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.cs new file mode 100644 index 000000000..1808f0d1f --- /dev/null +++ b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/20230507190214_InitialCreate.cs @@ -0,0 +1,623 @@ +using System; +using System.Text.Json; +using FilterLists.Directory.Domain.Aggregates; +using Microsoft.EntityFrameworkCore.Migrations; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +namespace FilterLists.Directory.Infrastructure.Migrations.Migrations +{ + /// + public partial class InitialCreate : Migration + { + /// + protected override void Up(MigrationBuilder migrationBuilder) + { + migrationBuilder.AlterDatabase() + .Annotation("Npgsql:Enum:aggregate_type", "filter_list,language,license,maintainer,software,syntax,tag"); + + migrationBuilder.CreateSequence( + name: "EntityFrameworkHiLoSequence-FilterListViewUrl", + startValue: 3000L, + incrementBy: 3); + + migrationBuilder.CreateTable( + name: "languages", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + iso6391 = table.Column(type: "character(2)", fixedLength: true, maxLength: 2, nullable: false), + name = table.Column(type: "text", nullable: false), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_languages", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "licenses", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + url = table.Column(type: "text", nullable: true), + permits_modification = table.Column(type: "boolean", nullable: false, defaultValue: false), + permits_distribution = table.Column(type: "boolean", nullable: false, defaultValue: false), + permits_commercial_use = table.Column(type: "boolean", nullable: false, defaultValue: false), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_licenses", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "maintainers", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + url = table.Column(type: "text", nullable: true), + email_address = table.Column(type: "text", nullable: true), + twitter_handle = table.Column(type: "text", nullable: true), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_maintainers", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "software", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + home_url = table.Column(type: "text", nullable: true), + download_url = table.Column(type: "text", nullable: true), + supports_abp_url_scheme = table.Column(type: "boolean", nullable: false, defaultValue: false), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_software", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "syntaxes", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + url = table.Column(type: "text", nullable: true), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_syntaxes", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "tags", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_tags", x => x.id); + }); + + migrationBuilder.CreateTable( + name: "filter_lists", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + name = table.Column(type: "text", nullable: false), + description = table.Column(type: "text", nullable: true), + license_id = table.Column(type: "bigint", nullable: false, defaultValue: 5L), + home_url = table.Column(type: "text", nullable: true), + onion_url = table.Column(type: "text", nullable: true), + policy_url = table.Column(type: "text", nullable: true), + submission_url = table.Column(type: "text", nullable: true), + issues_url = table.Column(type: "text", nullable: true), + forum_url = table.Column(type: "text", nullable: true), + chat_url = table.Column(type: "text", nullable: true), + email_address = table.Column(type: "text", nullable: true), + donate_url = table.Column(type: "text", nullable: true), + is_approved = table.Column(type: "boolean", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_lists", x => x.id); + table.ForeignKey( + name: "fk_filter_lists_licenses_license_id", + column: x => x.license_id, + principalTable: "licenses", + principalColumn: "id", + onDelete: ReferentialAction.Restrict); + }); + + migrationBuilder.CreateTable( + name: "software_syntaxes", + columns: table => new + { + software_id = table.Column(type: "bigint", nullable: false), + syntax_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_software_syntaxes", x => new { x.software_id, x.syntax_id }); + table.ForeignKey( + name: "fk_software_syntaxes_software_software_id", + column: x => x.software_id, + principalTable: "software", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_software_syntaxes_syntaxes_syntax_id", + column: x => x.syntax_id, + principalTable: "syntaxes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "changes", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false) + .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + reason = table.Column(type: "text", nullable: true), + submitted_at = table.Column(type: "timestamp with time zone", nullable: false, defaultValueSql: "CURRENT_TIMESTAMP"), + approved_at = table.Column(type: "timestamp with time zone", nullable: true), + rejected_at = table.Column(type: "timestamp with time zone", nullable: true), + rejected_reason = table.Column(type: "text", nullable: true), + before = table.Column(type: "jsonb", nullable: true), + after = table.Column(type: "jsonb", nullable: true), + aggregate_type = table.Column(type: "aggregate_type", nullable: false), + filter_list_id = table.Column(type: "bigint", nullable: true), + language_id = table.Column(type: "bigint", nullable: true), + license_id = table.Column(type: "bigint", nullable: true), + maintainer_id = table.Column(type: "bigint", nullable: true), + software_id = table.Column(type: "bigint", nullable: true), + syntax_id = table.Column(type: "bigint", nullable: true), + tag_id = table.Column(type: "bigint", nullable: true) + }, + constraints: table => + { + table.PrimaryKey("pk_changes", x => x.id); + table.ForeignKey( + name: "fk_changes_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_languages_language_id", + column: x => x.language_id, + principalTable: "languages", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_licenses_license_id", + column: x => x.license_id, + principalTable: "licenses", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_maintainers_maintainer_id", + column: x => x.maintainer_id, + principalTable: "maintainers", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_software_software_id", + column: x => x.software_id, + principalTable: "software", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_syntaxes_syntax_id", + column: x => x.syntax_id, + principalTable: "syntaxes", + principalColumn: "id"); + table.ForeignKey( + name: "fk_changes_tags_tag_id", + column: x => x.tag_id, + principalTable: "tags", + principalColumn: "id"); + }); + + migrationBuilder.CreateTable( + name: "dependents", + columns: table => new + { + dependency_filter_list_id = table.Column(type: "bigint", nullable: false), + dependent_filter_list_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_dependents", x => new { x.dependency_filter_list_id, x.dependent_filter_list_id }); + table.ForeignKey( + name: "fk_dependents_filter_lists_dependency_filter_list_id", + column: x => x.dependency_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_dependents_filter_lists_dependent_filter_list_id", + column: x => x.dependent_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "filter_list_languages", + columns: table => new + { + filter_list_id = table.Column(type: "bigint", nullable: false), + language_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_list_languages", x => new { x.filter_list_id, x.language_id }); + table.ForeignKey( + name: "fk_filter_list_languages_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_filter_list_languages_languages_language_id", + column: x => x.language_id, + principalTable: "languages", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "filter_list_maintainers", + columns: table => new + { + filter_list_id = table.Column(type: "bigint", nullable: false), + maintainer_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_list_maintainers", x => new { x.filter_list_id, x.maintainer_id }); + table.ForeignKey( + name: "fk_filter_list_maintainers_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_filter_list_maintainers_maintainers_maintainer_id", + column: x => x.maintainer_id, + principalTable: "maintainers", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "filter_list_syntaxes", + columns: table => new + { + filter_list_id = table.Column(type: "bigint", nullable: false), + syntax_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_list_syntaxes", x => new { x.filter_list_id, x.syntax_id }); + table.ForeignKey( + name: "fk_filter_list_syntaxes_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_filter_list_syntaxes_syntaxes_syntax_id", + column: x => x.syntax_id, + principalTable: "syntaxes", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "filter_list_tags", + columns: table => new + { + filter_list_id = table.Column(type: "bigint", nullable: false), + tag_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_list_tags", x => new { x.filter_list_id, x.tag_id }); + table.ForeignKey( + name: "fk_filter_list_tags_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_filter_list_tags_tags_tag_id", + column: x => x.tag_id, + principalTable: "tags", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "filter_list_view_urls", + columns: table => new + { + id = table.Column(type: "bigint", nullable: false), + filter_list_id = table.Column(type: "bigint", nullable: false), + segment_number = table.Column(type: "smallint", nullable: false, defaultValue: (short)1), + primariness = table.Column(type: "smallint", nullable: false, defaultValue: (short)1), + url = table.Column(type: "text", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_filter_list_view_urls", x => new { x.filter_list_id, x.id }); + table.ForeignKey( + name: "fk_filter_list_view_urls_filter_lists_filter_list_id", + column: x => x.filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "forks", + columns: table => new + { + upstream_filter_list_id = table.Column(type: "bigint", nullable: false), + fork_filter_list_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_forks", x => new { x.upstream_filter_list_id, x.fork_filter_list_id }); + table.ForeignKey( + name: "fk_forks_filter_lists_fork_filter_list_id", + column: x => x.fork_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_forks_filter_lists_upstream_filter_list_id", + column: x => x.upstream_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateTable( + name: "merges", + columns: table => new + { + included_in_filter_list_id = table.Column(type: "bigint", nullable: false), + includes_filter_list_id = table.Column(type: "bigint", nullable: false) + }, + constraints: table => + { + table.PrimaryKey("pk_merges", x => new { x.included_in_filter_list_id, x.includes_filter_list_id }); + table.ForeignKey( + name: "fk_merges_filter_lists_included_in_filter_list_id", + column: x => x.included_in_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + table.ForeignKey( + name: "fk_merges_filter_lists_includes_filter_list_id", + column: x => x.includes_filter_list_id, + principalTable: "filter_lists", + principalColumn: "id", + onDelete: ReferentialAction.Cascade); + }); + + migrationBuilder.CreateIndex( + name: "ix_changes_filter_list_id", + table: "changes", + column: "filter_list_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_language_id", + table: "changes", + column: "language_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_license_id", + table: "changes", + column: "license_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_maintainer_id", + table: "changes", + column: "maintainer_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_software_id", + table: "changes", + column: "software_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_syntax_id", + table: "changes", + column: "syntax_id"); + + migrationBuilder.CreateIndex( + name: "ix_changes_tag_id", + table: "changes", + column: "tag_id"); + + migrationBuilder.CreateIndex( + name: "ix_dependents_dependent_filter_list_id", + table: "dependents", + column: "dependent_filter_list_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_list_languages_language_id", + table: "filter_list_languages", + column: "language_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_list_maintainers_maintainer_id", + table: "filter_list_maintainers", + column: "maintainer_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_list_syntaxes_syntax_id", + table: "filter_list_syntaxes", + column: "syntax_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_list_tags_tag_id", + table: "filter_list_tags", + column: "tag_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_list_view_urls_filter_list_id_segment_number_primari", + table: "filter_list_view_urls", + columns: new[] { "filter_list_id", "segment_number", "primariness" }, + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_filter_lists_license_id", + table: "filter_lists", + column: "license_id"); + + migrationBuilder.CreateIndex( + name: "ix_filter_lists_name", + table: "filter_lists", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_forks_fork_filter_list_id", + table: "forks", + column: "fork_filter_list_id"); + + migrationBuilder.CreateIndex( + name: "ix_languages_iso6391", + table: "languages", + column: "iso6391", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_languages_name", + table: "languages", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_licenses_name", + table: "licenses", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_maintainers_name", + table: "maintainers", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_merges_includes_filter_list_id", + table: "merges", + column: "includes_filter_list_id"); + + migrationBuilder.CreateIndex( + name: "ix_software_name", + table: "software", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_software_syntaxes_syntax_id", + table: "software_syntaxes", + column: "syntax_id"); + + migrationBuilder.CreateIndex( + name: "ix_syntaxes_name", + table: "syntaxes", + column: "name", + unique: true); + + migrationBuilder.CreateIndex( + name: "ix_tags_name", + table: "tags", + column: "name", + unique: true); + } + + /// + protected override void Down(MigrationBuilder migrationBuilder) + { + migrationBuilder.DropTable( + name: "changes"); + + migrationBuilder.DropTable( + name: "dependents"); + + migrationBuilder.DropTable( + name: "filter_list_languages"); + + migrationBuilder.DropTable( + name: "filter_list_maintainers"); + + migrationBuilder.DropTable( + name: "filter_list_syntaxes"); + + migrationBuilder.DropTable( + name: "filter_list_tags"); + + migrationBuilder.DropTable( + name: "filter_list_view_urls"); + + migrationBuilder.DropTable( + name: "forks"); + + migrationBuilder.DropTable( + name: "merges"); + + migrationBuilder.DropTable( + name: "software_syntaxes"); + + migrationBuilder.DropTable( + name: "languages"); + + migrationBuilder.DropTable( + name: "maintainers"); + + migrationBuilder.DropTable( + name: "tags"); + + migrationBuilder.DropTable( + name: "filter_lists"); + + migrationBuilder.DropTable( + name: "software"); + + migrationBuilder.DropTable( + name: "syntaxes"); + + migrationBuilder.DropTable( + name: "licenses"); + + migrationBuilder.DropSequence( + name: "EntityFrameworkHiLoSequence-FilterListViewUrl"); + } + } +} diff --git a/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs new file mode 100644 index 000000000..cbd8f8878 --- /dev/null +++ b/services/Directory/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs @@ -0,0 +1,939 @@ +// +using System; +using System.Text.Json; +using FilterLists.Directory.Domain.Aggregates; +using FilterLists.Directory.Infrastructure.Persistence.Queries.Context; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Infrastructure; +using Microsoft.EntityFrameworkCore.Storage.ValueConversion; +using Npgsql.EntityFrameworkCore.PostgreSQL.Metadata; + +#nullable disable + +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("ProductVersion", "7.0.5") + .HasAnnotation("Relational:MaxIdentifierLength", 63); + + NpgsqlModelBuilderExtensions.HasPostgresEnum(modelBuilder, "aggregate_type", new[] { "filter_list", "language", "license", "maintainer", "software", "syntax", "tag" }); + NpgsqlModelBuilderExtensions.UseIdentityByDefaultColumns(modelBuilder); + + modelBuilder.HasSequence("EntityFrameworkHiLoSequence-FilterListViewUrl") + .StartsAt(3000L) + .IncrementsBy(3); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Change", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("After") + .HasColumnType("jsonb") + .HasColumnName("after"); + + b.Property("AggregateType") + .HasColumnType("aggregate_type") + .HasColumnName("aggregate_type"); + + b.Property("ApprovedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("approved_at"); + + b.Property("Before") + .HasColumnType("jsonb") + .HasColumnName("before"); + + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("LanguageId") + .HasColumnType("bigint") + .HasColumnName("language_id"); + + b.Property("LicenseId") + .HasColumnType("bigint") + .HasColumnName("license_id"); + + b.Property("MaintainerId") + .HasColumnType("bigint") + .HasColumnName("maintainer_id"); + + b.Property("Reason") + .HasColumnType("text") + .HasColumnName("reason"); + + b.Property("RejectedAt") + .HasColumnType("timestamp with time zone") + .HasColumnName("rejected_at"); + + b.Property("RejectedReason") + .HasColumnType("text") + .HasColumnName("rejected_reason"); + + b.Property("SoftwareId") + .HasColumnType("bigint") + .HasColumnName("software_id"); + + b.Property("SubmittedAt") + .ValueGeneratedOnAdd() + .HasColumnType("timestamp with time zone") + .HasColumnName("submitted_at") + .HasDefaultValueSql("CURRENT_TIMESTAMP"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.Property("TagId") + .HasColumnType("bigint") + .HasColumnName("tag_id"); + + b.HasKey("Id") + .HasName("pk_changes"); + + b.HasIndex("FilterListId") + .HasDatabaseName("ix_changes_filter_list_id"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_changes_language_id"); + + b.HasIndex("LicenseId") + .HasDatabaseName("ix_changes_license_id"); + + b.HasIndex("MaintainerId") + .HasDatabaseName("ix_changes_maintainer_id"); + + b.HasIndex("SoftwareId") + .HasDatabaseName("ix_changes_software_id"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_changes_syntax_id"); + + b.HasIndex("TagId") + .HasDatabaseName("ix_changes_tag_id"); + + b.ToTable("changes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b => + { + b.Property("DependencyFilterListId") + .HasColumnType("bigint") + .HasColumnName("dependency_filter_list_id"); + + b.Property("DependentFilterListId") + .HasColumnType("bigint") + .HasColumnName("dependent_filter_list_id"); + + b.HasKey("DependencyFilterListId", "DependentFilterListId") + .HasName("pk_dependents"); + + b.HasIndex("DependentFilterListId") + .HasDatabaseName("ix_dependents_dependent_filter_list_id"); + + b.ToTable("dependents", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("ChatUrl") + .HasColumnType("text") + .HasColumnName("chat_url"); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("DonateUrl") + .HasColumnType("text") + .HasColumnName("donate_url"); + + b.Property("EmailAddress") + .HasColumnType("text") + .HasColumnName("email_address"); + + b.Property("ForumUrl") + .HasColumnType("text") + .HasColumnName("forum_url"); + + b.Property("HomeUrl") + .HasColumnType("text") + .HasColumnName("home_url"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("IssuesUrl") + .HasColumnType("text") + .HasColumnName("issues_url"); + + b.Property("LicenseId") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasDefaultValue(5L) + .HasColumnName("license_id"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("OnionUrl") + .HasColumnType("text") + .HasColumnName("onion_url"); + + b.Property("PolicyUrl") + .HasColumnType("text") + .HasColumnName("policy_url"); + + b.Property("SubmissionUrl") + .HasColumnType("text") + .HasColumnName("submission_url"); + + b.HasKey("Id") + .HasName("pk_filter_lists"); + + b.HasIndex("LicenseId") + .HasDatabaseName("ix_filter_lists_license_id"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_filter_lists_name"); + + b.ToTable("filter_lists", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("LanguageId") + .HasColumnType("bigint") + .HasColumnName("language_id"); + + b.HasKey("FilterListId", "LanguageId") + .HasName("pk_filter_list_languages"); + + b.HasIndex("LanguageId") + .HasDatabaseName("ix_filter_list_languages_language_id"); + + b.ToTable("filter_list_languages", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListMaintainer", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("MaintainerId") + .HasColumnType("bigint") + .HasColumnName("maintainer_id"); + + b.HasKey("FilterListId", "MaintainerId") + .HasName("pk_filter_list_maintainers"); + + b.HasIndex("MaintainerId") + .HasDatabaseName("ix_filter_list_maintainers_maintainer_id"); + + b.ToTable("filter_list_maintainers", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListSyntax", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.HasKey("FilterListId", "SyntaxId") + .HasName("pk_filter_list_syntaxes"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_filter_list_syntaxes_syntax_id"); + + b.ToTable("filter_list_syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListTag", b => + { + b.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b.Property("TagId") + .HasColumnType("bigint") + .HasColumnName("tag_id"); + + b.HasKey("FilterListId", "TagId") + .HasName("pk_filter_list_tags"); + + b.HasIndex("TagId") + .HasDatabaseName("ix_filter_list_tags_tag_id"); + + b.ToTable("filter_list_tags", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => + { + b.Property("UpstreamFilterListId") + .HasColumnType("bigint") + .HasColumnName("upstream_filter_list_id"); + + b.Property("ForkFilterListId") + .HasColumnType("bigint") + .HasColumnName("fork_filter_list_id"); + + b.HasKey("UpstreamFilterListId", "ForkFilterListId") + .HasName("pk_forks"); + + b.HasIndex("ForkFilterListId") + .HasDatabaseName("ix_forks_fork_filter_list_id"); + + b.ToTable("forks", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Iso6391") + .IsRequired() + .HasMaxLength(2) + .HasColumnType("character(2)") + .HasColumnName("iso6391") + .IsFixedLength(); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_languages"); + + b.HasIndex("Iso6391") + .IsUnique() + .HasDatabaseName("ix_languages_iso6391"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_languages_name"); + + b.ToTable("languages", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("PermitsCommercialUse") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_commercial_use"); + + b.Property("PermitsDistribution") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_distribution"); + + b.Property("PermitsModification") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("permits_modification"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_licenses"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_licenses_name"); + + b.ToTable("licenses", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("EmailAddress") + .HasColumnType("text") + .HasColumnName("email_address"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("TwitterHandle") + .HasColumnType("text") + .HasColumnName("twitter_handle"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_maintainers"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_maintainers_name"); + + b.ToTable("maintainers", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b => + { + b.Property("IncludedInFilterListId") + .HasColumnType("bigint") + .HasColumnName("included_in_filter_list_id"); + + b.Property("IncludesFilterListId") + .HasColumnType("bigint") + .HasColumnName("includes_filter_list_id"); + + b.HasKey("IncludedInFilterListId", "IncludesFilterListId") + .HasName("pk_merges"); + + b.HasIndex("IncludesFilterListId") + .HasDatabaseName("ix_merges_includes_filter_list_id"); + + b.ToTable("merges", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("DownloadUrl") + .HasColumnType("text") + .HasColumnName("download_url"); + + b.Property("HomeUrl") + .HasColumnType("text") + .HasColumnName("home_url"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("SupportsAbpUrlScheme") + .ValueGeneratedOnAdd() + .HasColumnType("boolean") + .HasDefaultValue(false) + .HasColumnName("supports_abp_url_scheme"); + + b.HasKey("Id") + .HasName("pk_software"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_software_name"); + + b.ToTable("software", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.SoftwareSyntax", b => + { + b.Property("SoftwareId") + .HasColumnType("bigint") + .HasColumnName("software_id"); + + b.Property("SyntaxId") + .HasColumnType("bigint") + .HasColumnName("syntax_id"); + + b.HasKey("SoftwareId", "SyntaxId") + .HasName("pk_software_syntaxes"); + + b.HasIndex("SyntaxId") + .HasDatabaseName("ix_software_syntaxes_syntax_id"); + + b.ToTable("software_syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.Property("Url") + .HasColumnType("text") + .HasColumnName("url"); + + b.HasKey("Id") + .HasName("pk_syntaxes"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_syntaxes_name"); + + b.ToTable("syntaxes", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseIdentityByDefaultColumn(b.Property("Id")); + + b.Property("Description") + .HasColumnType("text") + .HasColumnName("description"); + + b.Property("IsApproved") + .HasColumnType("boolean") + .HasColumnName("is_approved"); + + b.Property("Name") + .IsRequired() + .HasColumnType("text") + .HasColumnName("name"); + + b.HasKey("Id") + .HasName("pk_tags"); + + b.HasIndex("Name") + .IsUnique() + .HasDatabaseName("ix_tags_name"); + + b.ToTable("tags", (string)null); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Change", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", null) + .WithMany("Changes") + .HasForeignKey("FilterListId") + .HasConstraintName("fk_changes_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", null) + .WithMany("Changes") + .HasForeignKey("LanguageId") + .HasConstraintName("fk_changes_languages_language_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", null) + .WithMany("Changes") + .HasForeignKey("LicenseId") + .HasConstraintName("fk_changes_licenses_license_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", null) + .WithMany("Changes") + .HasForeignKey("MaintainerId") + .HasConstraintName("fk_changes_maintainers_maintainer_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", null) + .WithMany("Changes") + .HasForeignKey("SoftwareId") + .HasConstraintName("fk_changes_software_software_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", null) + .WithMany("Changes") + .HasForeignKey("SyntaxId") + .HasConstraintName("fk_changes_syntaxes_syntax_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", null) + .WithMany("Changes") + .HasForeignKey("TagId") + .HasConstraintName("fk_changes_tags_tag_id"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Dependent", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependencyFilterList") + .WithMany("DependentFilterLists") + .HasForeignKey("DependencyFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_dependents_filter_lists_dependency_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "DependentFilterList") + .WithMany("DependencyFilterLists") + .HasForeignKey("DependentFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_dependents_filter_lists_dependent_filter_list_id"); + + b.Navigation("DependencyFilterList"); + + b.Navigation("DependentFilterList"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License") + .WithMany("FilterLists") + .HasForeignKey("LicenseId") + .OnDelete(DeleteBehavior.Restrict) + .IsRequired() + .HasConstraintName("fk_filter_lists_licenses_license_id"); + + b.OwnsMany("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", "ViewUrls", b1 => + { + b1.Property("FilterListId") + .HasColumnType("bigint") + .HasColumnName("filter_list_id"); + + b1.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("bigint") + .HasColumnName("id"); + + NpgsqlPropertyBuilderExtensions.UseHiLo(b1.Property("Id"), "EntityFrameworkHiLoSequence-FilterListViewUrl"); + + b1.Property("Primariness") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1) + .HasColumnName("primariness"); + + b1.Property("SegmentNumber") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1) + .HasColumnName("segment_number"); + + b1.Property("Url") + .IsRequired() + .HasColumnType("text") + .HasColumnName("url"); + + b1.HasKey("FilterListId", "Id") + .HasName("pk_filter_list_view_urls"); + + b1.HasIndex("FilterListId", "SegmentNumber", "Primariness") + .IsUnique() + .HasDatabaseName("ix_filter_list_view_urls_filter_list_id_segment_number_primari"); + + b1.ToTable("filter_list_view_urls", (string)null); + + b1.WithOwner("FilterList") + .HasForeignKey("FilterListId") + .HasConstraintName("fk_filter_list_view_urls_filter_lists_filter_list_id"); + + b1.Navigation("FilterList"); + }); + + b.Navigation("License"); + + b.Navigation("ViewUrls"); + }); + + 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() + .HasConstraintName("fk_filter_list_languages_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", "Language") + .WithMany("FilterListLanguages") + .HasForeignKey("LanguageId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_languages_languages_language_id"); + + b.Navigation("FilterList"); + + b.Navigation("Language"); + }); + + 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() + .HasConstraintName("fk_filter_list_maintainers_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", "Maintainer") + .WithMany("FilterListMaintainers") + .HasForeignKey("MaintainerId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_maintainers_maintainers_maintainer_id"); + + b.Navigation("FilterList"); + + b.Navigation("Maintainer"); + }); + + 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() + .HasConstraintName("fk_filter_list_syntaxes_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax") + .WithMany("FilterListSyntaxes") + .HasForeignKey("SyntaxId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_syntaxes_syntaxes_syntax_id"); + + b.Navigation("FilterList"); + + b.Navigation("Syntax"); + }); + + 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() + .HasConstraintName("fk_filter_list_tags_filter_lists_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", "Tag") + .WithMany("FilterListTags") + .HasForeignKey("TagId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_filter_list_tags_tags_tag_id"); + + b.Navigation("FilterList"); + + b.Navigation("Tag"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList") + .WithMany("UpstreamFilterLists") + .HasForeignKey("ForkFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_forks_filter_lists_fork_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "UpstreamFilterList") + .WithMany("ForkFilterLists") + .HasForeignKey("UpstreamFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_forks_filter_lists_upstream_filter_list_id"); + + b.Navigation("ForkFilterList"); + + b.Navigation("UpstreamFilterList"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Merge", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludedInFilterList") + .WithMany("IncludesFilterLists") + .HasForeignKey("IncludedInFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_merges_filter_lists_included_in_filter_list_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "IncludesFilterList") + .WithMany("IncludedInFilterLists") + .HasForeignKey("IncludesFilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_merges_filter_lists_includes_filter_list_id"); + + b.Navigation("IncludedInFilterList"); + + b.Navigation("IncludesFilterList"); + }); + + 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() + .HasConstraintName("fk_software_syntaxes_software_software_id"); + + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", "Syntax") + .WithMany("SoftwareSyntaxes") + .HasForeignKey("SyntaxId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired() + .HasConstraintName("fk_software_syntaxes_syntaxes_syntax_id"); + + b.Navigation("Software"); + + b.Navigation("Syntax"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", b => + { + b.Navigation("Changes"); + + b.Navigation("DependencyFilterLists"); + + b.Navigation("DependentFilterLists"); + + b.Navigation("FilterListLanguages"); + + b.Navigation("FilterListMaintainers"); + + b.Navigation("FilterListSyntaxes"); + + b.Navigation("FilterListTags"); + + b.Navigation("ForkFilterLists"); + + b.Navigation("IncludedInFilterLists"); + + b.Navigation("IncludesFilterLists"); + + b.Navigation("UpstreamFilterLists"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Language", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListLanguages"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterLists"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Maintainer", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListMaintainers"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Software", b => + { + b.Navigation("Changes"); + + b.Navigation("SoftwareSyntaxes"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Syntax", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListSyntaxes"); + + b.Navigation("SoftwareSyntaxes"); + }); + + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Tag", b => + { + b.Navigation("Changes"); + + b.Navigation("FilterListTags"); + }); +#pragma warning restore 612, 618 + } + } +}