diff --git a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.Designer.cs b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.Designer.cs similarity index 91% rename from services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.Designer.cs rename to services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.Designer.cs index f6259ffc7..5312ccbdd 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.Designer.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.Designer.cs @@ -10,7 +10,7 @@ namespace FilterLists.Directory.Infrastructure.Migrations.Migrations { [DbContext(typeof(QueryDbContext))] - [Migration("20200828001720_Initial")] + [Migration("20200828005349_Initial")] partial class Initial { protected override void BuildTargetModel(ModelBuilder modelBuilder) @@ -147,6 +147,38 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.ToTable("FilterListTags"); }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("FilterListId") + .HasColumnType("integer"); + + b.Property("Primariness") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1); + + b.Property("SegmentNumber") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1); + + b.Property("Url") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("FilterListId", "SegmentNumber", "Primariness") + .IsUnique(); + + b.ToTable("FilterListViewUrls"); + }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => { b.Property("UpstreamFilterListId") @@ -344,41 +376,6 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License") .WithMany("FilterLists") .HasForeignKey("LicenseId"); - - b.OwnsMany("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", "ViewUrls", b1 => - { - b1.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - - b1.Property("FilterListId") - .HasColumnType("integer"); - - b1.Property("Primariness") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)1); - - b1.Property("SegmentNumber") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)1); - - b1.Property("Url") - .IsRequired() - .HasColumnType("text"); - - b1.HasKey("Id"); - - b1.HasIndex("FilterListId", "SegmentNumber", "Primariness") - .IsUnique(); - - b1.ToTable("FilterListViewUrls"); - - b1.WithOwner() - .HasForeignKey("FilterListId"); - }); }); modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b => @@ -441,6 +438,15 @@ protected override void BuildTargetModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList") + .WithMany("ViewUrls") + .HasForeignKey("FilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => { b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList") diff --git a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.cs b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.cs similarity index 99% rename from services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.cs rename to services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.cs index c5cc39ce4..6259d0096 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828001720_Initial.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/20200828005349_Initial.cs @@ -276,10 +276,10 @@ protected override void Up(MigrationBuilder migrationBuilder) { Id = table.Column(nullable: false) .Annotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn), + FilterListId = table.Column(nullable: false), SegmentNumber = table.Column(nullable: false, defaultValue: (short)1), Primariness = table.Column(nullable: false, defaultValue: (short)1), - Url = table.Column(nullable: false), - FilterListId = table.Column(nullable: false) + Url = table.Column(nullable: false) }, constraints: table => { diff --git a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs index e62e2f3fa..670409cb4 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure.Migrations/Migrations/QueryDbContextModelSnapshot.cs @@ -145,6 +145,38 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.ToTable("FilterListTags"); }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", b => + { + b.Property("Id") + .ValueGeneratedOnAdd() + .HasColumnType("integer") + .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); + + b.Property("FilterListId") + .HasColumnType("integer"); + + b.Property("Primariness") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1); + + b.Property("SegmentNumber") + .ValueGeneratedOnAdd() + .HasColumnType("smallint") + .HasDefaultValue((short)1); + + b.Property("Url") + .IsRequired() + .HasColumnType("text"); + + b.HasKey("Id"); + + b.HasIndex("FilterListId", "SegmentNumber", "Primariness") + .IsUnique(); + + b.ToTable("FilterListViewUrls"); + }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => { b.Property("UpstreamFilterListId") @@ -342,41 +374,6 @@ protected override void BuildModel(ModelBuilder modelBuilder) b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.License", "License") .WithMany("FilterLists") .HasForeignKey("LicenseId"); - - b.OwnsMany("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", "ViewUrls", b1 => - { - b1.Property("Id") - .ValueGeneratedOnAdd() - .HasColumnType("integer") - .HasAnnotation("Npgsql:ValueGenerationStrategy", NpgsqlValueGenerationStrategy.IdentityByDefaultColumn); - - b1.Property("FilterListId") - .HasColumnType("integer"); - - b1.Property("Primariness") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)1); - - b1.Property("SegmentNumber") - .ValueGeneratedOnAdd() - .HasColumnType("smallint") - .HasDefaultValue((short)1); - - b1.Property("Url") - .IsRequired() - .HasColumnType("text"); - - b1.HasKey("Id"); - - b1.HasIndex("FilterListId", "SegmentNumber", "Primariness") - .IsUnique(); - - b1.ToTable("FilterListViewUrls"); - - b1.WithOwner() - .HasForeignKey("FilterListId"); - }); }); modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListLanguage", b => @@ -439,6 +436,15 @@ protected override void BuildModel(ModelBuilder modelBuilder) .IsRequired(); }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterListViewUrl", b => + { + b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "FilterList") + .WithMany("ViewUrls") + .HasForeignKey("FilterListId") + .OnDelete(DeleteBehavior.Cascade) + .IsRequired(); + }); + modelBuilder.Entity("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Fork", b => { b.HasOne("FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.FilterList", "ForkFilterList") diff --git a/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs b/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs index 1f6e6c67d..ffb3514af 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs @@ -40,24 +40,6 @@ internal class FilterListTypeConfiguration : IEntityTypeConfiguration builder) { _ = builder ?? throw new ArgumentNullException(nameof(builder)); - builder.OwnsMany(fl => fl.ViewUrls, - o => - { - o.ToTable(nameof(FilterListViewUrl) + "s"); - const string id = "Id"; - o.Property(id); - o.HasKey(id); - const string filterListId = nameof(FilterList) + id; - o.Property(filterListId); - o.Property(u => u.SegmentNumber).HasDefaultValue(1); - o.Property(u => u.Primariness).HasDefaultValue(1); - o.HasIndex( - filterListId, - nameof(FilterListViewUrl.SegmentNumber), - nameof(FilterListViewUrl.Primariness)) - .IsUnique(); - }) - .HasDataJsonFile(); builder.HasDataJsonFile(); } } diff --git a/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListViewUrl.cs b/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListViewUrl.cs index e9f3e3c61..a08e0d35b 100644 --- a/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListViewUrl.cs +++ b/services/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListViewUrl.cs @@ -1,11 +1,29 @@ using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class FilterListViewUrl { + public int Id { get; set; } + public int FilterListId { get; set; } + public FilterList FilterList { get; set; } = null!; public short SegmentNumber { get; set; } public short Primariness { get; set; } public Uri Url { get; set; } = null!; } + + internal class FilterListViewUrlConfiguration : IEntityTypeConfiguration + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + builder.ToTable(nameof(FilterListViewUrl) + "s"); + builder.Property(u => u.SegmentNumber).HasDefaultValue(1); + builder.Property(u => u.Primariness).HasDefaultValue(1); + builder.HasIndex(u => new {u.FilterListId, u.SegmentNumber, u.Primariness}).IsUnique(); + builder.HasDataJsonFile(); + } + } } \ No newline at end of file