diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/AggregateRoot.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/AggregateRoot.cs new file mode 100644 index 000000000..5f7d1bce7 --- /dev/null +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/AggregateRoot.cs @@ -0,0 +1,20 @@ +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; + +public abstract record AggregateRoot +{ + public bool? IsApproved { get; private init; } +} + +internal abstract class AggregateRootTypeConfiguration : IEntityTypeConfiguration + where TAggregateRoot : AggregateRoot +{ + public virtual void Configure(EntityTypeBuilder builder) + { + builder.Property(e => e.IsApproved) + .IsRequired() + .HasDefaultValue(true); // legacy json data approved via GitHub PR + } +} diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs index 4f2321c58..e1807faac 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record FilterList +public record FilterList : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -32,9 +32,9 @@ public record FilterList public IReadOnlyCollection DependentFilterLists { get; } = new HashSet(); } -internal class FilterListTypeConfiguration : IEntityTypeConfiguration +internal class FilterListTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(f => f.Name) .IsUnique(); @@ -44,5 +44,6 @@ public virtual void Configure(EntityTypeBuilder builder) .WithMany(l => l.FilterLists) .OnDelete(DeleteBehavior.Restrict); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs index 68823ea08..3bdf2f60f 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs @@ -3,16 +3,16 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record Language +public record Language : AggregateRoot { public string Iso6391 { get; init; } = null!; public string Name { get; init; } = null!; public IReadOnlyCollection FilterListLanguages { get; } = new HashSet(); } -internal class LanguageTypeConfiguration : IEntityTypeConfiguration +internal class LanguageTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasKey(l => l.Iso6391); builder.Property(l => l.Iso6391) @@ -21,5 +21,6 @@ public virtual void Configure(EntityTypeBuilder builder) builder.HasIndex(l => l.Name) .IsUnique(); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs index 929118fa5..18fef687d 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record License +public record License : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -14,9 +14,9 @@ public record License public IReadOnlyCollection FilterLists { get; } = new HashSet(); } -internal class LicenseTypeConfiguration : IEntityTypeConfiguration +internal class LicenseTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(l => l.Name) .IsUnique(); @@ -27,5 +27,6 @@ public virtual void Configure(EntityTypeBuilder builder) builder.Property(l => l.PermitsCommercialUse) .HasDefaultValue(false); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs index 82ff3eb92..faa626a26 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record Maintainer +public record Maintainer : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -13,12 +13,13 @@ public record Maintainer public IReadOnlyCollection FilterListMaintainers { get; } = new HashSet(); } -internal class MaintainerTypeConfiguration : IEntityTypeConfiguration +internal class MaintainerTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(m => m.Name) .IsUnique(); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs index 88314aae0..ba2bd32d3 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record Software +public record Software : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -14,14 +14,15 @@ public record Software public IReadOnlyCollection SoftwareSyntaxes { get; } = new HashSet(); } -internal class SoftwareTypeConfiguration : IEntityTypeConfiguration +internal class SoftwareTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(s => s.Name) .IsUnique(); builder.Property(s => s.SupportsAbpUrlScheme) .HasDefaultValue(false); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs index b200c951a..bbde52dc0 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record Syntax +public record Syntax : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -13,12 +13,13 @@ public record Syntax public IReadOnlyCollection SoftwareSyntaxes { get; } = new HashSet(); } -internal class SyntaxTypeConfiguration : IEntityTypeConfiguration +internal class SyntaxTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(s => s.Name) .IsUnique(); builder.HasDataJsonFile(); + base.Configure(builder); } } diff --git a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs index db49dca8b..683c73195 100644 --- a/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs +++ b/services/Directory/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs @@ -3,7 +3,7 @@ namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -public record Tag +public record Tag : AggregateRoot { public int Id { get; init; } public string Name { get; init; } = null!; @@ -11,12 +11,13 @@ public record Tag public IReadOnlyCollection FilterListTags { get; } = new HashSet(); } -internal class TagTypeConfiguration : IEntityTypeConfiguration +internal class TagTypeConfiguration : AggregateRootTypeConfiguration { - public virtual void Configure(EntityTypeBuilder builder) + public override void Configure(EntityTypeBuilder builder) { builder.HasIndex(t => t.Name) .IsUnique(); builder.HasDataJsonFile(); + base.Configure(builder); } }