diff --git a/services/Directory/FilterLists.Directory.Domain/Aggregates/FilterLists/FilterList.cs b/services/Directory/FilterLists.Directory.Domain/Aggregates/FilterLists/FilterList.cs index ec94e5ffd..ab59d4c9a 100644 --- a/services/Directory/FilterLists.Directory.Domain/Aggregates/FilterLists/FilterList.cs +++ b/services/Directory/FilterLists.Directory.Domain/Aggregates/FilterLists/FilterList.cs @@ -6,6 +6,7 @@ namespace FilterLists.Directory.Domain.Aggregates.FilterLists; public sealed class FilterList : AggregateRoot, IRequireChangeApproval { private ICollection _changes = new HashSet(); + private int _licenseId; private FilterList() { @@ -13,7 +14,7 @@ private FilterList() public string Name { get; private init; } = null!; public string? Description { get; private init; } - public License? License { get; private init; } + public License License { get; private set; } = null!; public Uri? HomeUrl { get; private init; } public Uri? OnionUrl { get; private init; } public Uri? PolicyUrl { get; private init; } @@ -53,7 +54,6 @@ public static FilterList Create( { Name = name, Description = description, - License = license, HomeUrl = homeUrl, OnionUrl = onionUrl, PolicyUrl = policyUrl, @@ -65,6 +65,17 @@ public static FilterList Create( DonateUrl = donateUrl, ViewUrls = urls }; + + // TODO: resolve temporary inconsistent state between nav prop (default null) and ID field (default 0) between creation and adding to DbContext + if (license is not null) + { + list.License = license; + } + else + { + list._licenseId = License.DefaultAllRightsReservedId; + } + list._changes = new HashSet(new[] { FilterListChange.Create(list, createReason) }); return list; } diff --git a/services/Directory/FilterLists.Directory.Domain/Aggregates/Licenses/License.cs b/services/Directory/FilterLists.Directory.Domain/Aggregates/Licenses/License.cs index bfd8c357b..16a53afc0 100644 --- a/services/Directory/FilterLists.Directory.Domain/Aggregates/Licenses/License.cs +++ b/services/Directory/FilterLists.Directory.Domain/Aggregates/Licenses/License.cs @@ -4,6 +4,8 @@ public sealed class License { private License() { } + public static int DefaultAllRightsReservedId => 5; + public string Name { get; private init; } = null!; public Uri? Url { get; private init; } public bool PermitsModification { get; private init; } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Commands/EntityTypeConfigurations/FilterListTypeConfiguration.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Commands/EntityTypeConfigurations/FilterListTypeConfiguration.cs index a4298b110..b799aa3bc 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Commands/EntityTypeConfigurations/FilterListTypeConfiguration.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Commands/EntityTypeConfigurations/FilterListTypeConfiguration.cs @@ -1,4 +1,6 @@ -using FilterLists.Directory.Domain.Aggregates.FilterLists; +using System.Globalization; +using EFCore.NamingConventions.Internal; +using FilterLists.Directory.Domain.Aggregates.FilterLists; using Microsoft.EntityFrameworkCore; using Microsoft.EntityFrameworkCore.Metadata.Builders; @@ -8,7 +10,15 @@ internal class FilterListTypeConfiguration : IEntityTypeConfiguration builder) { + // TODO: register and resolve INameRewriter + var nr = new SnakeCaseNameRewriter(CultureInfo.InvariantCulture); + builder.Property(nameof(Queries.Entities.FilterList.Id)); + builder.Property("_licenseId") + .HasColumnName(nr.RewriteName(nameof(Queries.Entities.FilterList.LicenseId))); + builder.HasOne(f => f.License) + .WithMany() + .HasForeignKey("_licenseId"); builder.Navigation(f => f.Changes) .AutoInclude(); builder.Navigation(f => f.ViewUrls)