diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs deleted file mode 100644 index 359b09ca1..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Contracts/IHaveSurrogateKey.cs +++ /dev/null @@ -1,7 +0,0 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts -{ - internal interface IHaveSurrogateKey - { - int Id { get; } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Dependent.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Dependent.cs index f26d5cbe8..297c19ea0 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Dependent.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Dependent.cs @@ -1,8 +1,33 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class Dependent { public FilterList DependencyFilterList { get; private set; } = null!; public FilterList DependentFilterList { get; private set; } = null!; } + + internal class DependentTypeConfiguration : IEntityTypeConfiguration where TEntity : Dependent + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string dependencyFilterListId = nameof(Dependent.DependencyFilterList) + "Id"; + const string dependentFilterListId = nameof(Dependent.DependentFilterList) + "Id"; + builder.Property(dependencyFilterListId); + builder.Property(dependentFilterListId); + builder.HasKey(dependencyFilterListId, dependentFilterListId); + builder.HasOne(d => d.DependencyFilterList) + .WithMany(f => (IEnumerable)f.DependencyFilterLists) + .HasForeignKey(dependencyFilterListId); + builder.HasOne(d => d.DependentFilterList) + .WithMany(f => (IEnumerable)f.DependentFilterLists) + .HasForeignKey(dependentFilterListId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs index f5f31da7d..9f38de459 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterList.cs @@ -1,21 +1,21 @@ using System; using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class FilterList : IHaveSurrogateKey + public class FilterList { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public string? Description { get; private set; } public License? License { get; private set; } - public ICollection FilterListSyntaxes { get; private set; } = new HashSet(); - public ICollection FilterListLanguages { get; private set; } = new HashSet(); - public ICollection FilterListTags { get; private set; } = new HashSet(); - public Uri ViewUrl { get; private set; } = null!; - public ICollection ViewUrlPartials { get; private set; } = new HashSet(); - public ICollection ViewUrlMirrors { get; private set; } = new HashSet(); + public ICollection FilterListSyntaxes { get; } = new HashSet(); + public ICollection FilterListLanguages { get; } = new HashSet(); + public ICollection FilterListTags { get; } = new HashSet(); + public Uri ViewUrl { get; } = null!; + public ICollection ViewUrlPartials { get; } = new HashSet(); + public ICollection ViewUrlMirrors { get; } = new HashSet(); public Uri? HomeUrl { get; private set; } public Uri? OnionUrl { get; private set; } public Uri? PolicyUrl { get; private set; } @@ -25,12 +25,24 @@ public class FilterList : IHaveSurrogateKey public Uri? ChatUrl { get; private set; } public string? EmailAddress { get; private set; } public Uri? DonateUrl { get; private set; } - public ICollection FilterListMaintainers { get; private set; } = new HashSet(); - public ICollection UpstreamFilterLists { get; private set; } = new HashSet(); - public ICollection ForkFilterLists { get; private set; } = new HashSet(); - public ICollection IncludedInFilterLists { get; private set; } = new HashSet(); - public ICollection IncludesFilterLists { get; private set; } = new HashSet(); - public ICollection DependencyFilterLists { get; private set; } = new HashSet(); - public ICollection DependentFilterLists { get; private set; } = new HashSet(); + public ICollection FilterListMaintainers { get; } = new HashSet(); + public ICollection UpstreamFilterLists { get; } = new HashSet(); + public ICollection ForkFilterLists { get; } = new HashSet(); + public ICollection IncludedInFilterLists { get; } = new HashSet(); + public ICollection IncludesFilterLists { get; } = new HashSet(); + public ICollection DependencyFilterLists { get; } = new HashSet(); + public ICollection DependentFilterLists { get; } = new HashSet(); + } + + internal class FilterListTypeConfiguration : IEntityTypeConfiguration where TEntity : FilterList + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = "Id"; + builder.Property(filterListId); + builder.HasKey(filterListId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListLanguage.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListLanguage.cs index 041d1584c..2f3b26b9d 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListLanguage.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListLanguage.cs @@ -1,8 +1,27 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class FilterListLanguage { public FilterList FilterList { get; private set; } = null!; public Language Language { get; private set; } = null!; } + + internal class FilterListLanguageTypeConfiguration : IEntityTypeConfiguration + where TEntity : FilterListLanguage + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = nameof(FilterListLanguage.FilterList) + "Id"; + const string languageId = nameof(FilterListLanguage.Language) + "Id"; + builder.Property(filterListId); + builder.Property(languageId); + builder.HasKey(filterListId, languageId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListMaintainer.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListMaintainer.cs index 933102ed9..a31572a2d 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListMaintainer.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListMaintainer.cs @@ -1,8 +1,27 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class FilterListMaintainer { public FilterList FilterList { get; private set; } = null!; public Maintainer Maintainer { get; private set; } = null!; } + + internal class FilterListMaintainerTypeConfiguration : IEntityTypeConfiguration + where TEntity : FilterListMaintainer + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = nameof(FilterListMaintainer.FilterList) + "Id"; + const string maintainerId = nameof(FilterListMaintainer.Maintainer) + "Id"; + builder.Property(filterListId); + builder.Property(maintainerId); + builder.HasKey(filterListId, maintainerId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListSyntax.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListSyntax.cs index 577e8b362..4163887fa 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListSyntax.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListSyntax.cs @@ -1,8 +1,27 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class FilterListSyntax { public FilterList FilterList { get; private set; } = null!; public Syntax Syntax { get; private set; } = null!; } + + internal class FilterListSyntaxTypeConfiguration : IEntityTypeConfiguration + where TEntity : FilterListSyntax + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = nameof(FilterListSyntax.FilterList) + "Id"; + const string syntaxId = nameof(FilterListSyntax.Syntax) + "Id"; + builder.Property(filterListId); + builder.Property(syntaxId); + builder.HasKey(filterListId, syntaxId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListTag.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListTag.cs index b82e729e1..64f8bb5dc 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListTag.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/FilterListTag.cs @@ -1,8 +1,27 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class FilterListTag { public FilterList FilterList { get; private set; } = null!; public Tag Tag { get; private set; } = null!; } + + internal class FilterListTagTypeConfiguration : IEntityTypeConfiguration + where TEntity : FilterListTag + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = nameof(FilterListTag.FilterList) + "Id"; + const string tagId = nameof(FilterListTag.Tag) + "Id"; + builder.Property(filterListId); + builder.Property(tagId); + builder.HasKey(filterListId, tagId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Fork.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Fork.cs index 83b02d76e..50b49f284 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Fork.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Fork.cs @@ -1,8 +1,33 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class Fork { public FilterList UpstreamFilterList { get; private set; } = null!; public FilterList ForkFilterList { get; private set; } = null!; } + + internal class ForkTypeConfiguration : IEntityTypeConfiguration where TEntity : Fork + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string upstreamFilterListId = nameof(Fork.UpstreamFilterList) + "Id"; + const string forkFilterListId = nameof(Fork.ForkFilterList) + "Id"; + builder.Property(upstreamFilterListId); + builder.Property(forkFilterListId); + builder.HasKey(upstreamFilterListId, forkFilterListId); + builder.HasOne(f => f.UpstreamFilterList) + .WithMany(f => (IEnumerable)f.UpstreamFilterLists) + .HasForeignKey(upstreamFilterListId); + builder.HasOne(f => f.ForkFilterList) + .WithMany(f => (IEnumerable)f.ForkFilterLists) + .HasForeignKey(forkFilterListId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs index beab5735c..6bb1f8b09 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Language.cs @@ -1,11 +1,25 @@ -using System.Collections.Generic; +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class Language { - public string Iso6391 { get; private set; } = null!; - public string Name { get; private set; } = null!; - public ICollection FilterListLanguages { get; private set; } = new HashSet(); + public string Iso6391 { get; } = null!; + public string Name { get; } = null!; + public ICollection FilterListLanguages { get; } = new HashSet(); + } + + internal class LanguageTypeConfiguration : IEntityTypeConfiguration + where TEntity : Language + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + builder.HasKey(l => l.Iso6391); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs index a2a2fb0bf..38a7a01f6 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/License.cs @@ -1,15 +1,27 @@ using System; using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class License : IHaveSurrogateKey + public class License { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public string? GitHubKey { get; private set; } public Uri? Url { get; private set; } - public ICollection FilterLists { get; private set; } = new HashSet(); + public ICollection FilterLists { get; } = new HashSet(); + } + + internal class LicenseTypeConfiguration : IEntityTypeConfiguration where TEntity : License + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string licenseId = "Id"; + builder.Property(licenseId); + builder.HasKey(licenseId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs index 95a6b9ff6..e7000f28c 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Maintainer.cs @@ -1,16 +1,28 @@ using System; using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class Maintainer : IHaveSurrogateKey + public class Maintainer { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public Uri? Url { get; private set; } public string? EmailAddress { get; private set; } public string? TwitterHandle { get; private set; } - public ICollection FilterListMaintainers { get; private set; } = new HashSet(); + public ICollection FilterListMaintainers { get; } = new HashSet(); + } + + internal class MaintainerTypeConfiguration : IEntityTypeConfiguration where TEntity : Maintainer + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string maintainerId = "Id"; + builder.Property(maintainerId); + builder.HasKey(maintainerId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Merge.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Merge.cs index 17fd04e6a..d296fe5f3 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Merge.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Merge.cs @@ -1,8 +1,33 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class Merge { public FilterList IncludedInFilterList { get; private set; } = null!; public FilterList IncludesFilterList { get; private set; } = null!; } + + internal class MergeTypeConfiguration : IEntityTypeConfiguration where TEntity : Merge + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string includedInFilterListId = nameof(Merge.IncludedInFilterList) + "Id"; + const string includesFilterListId = nameof(Merge.IncludesFilterList) + "Id"; + builder.Property(includedInFilterListId); + builder.Property(includesFilterListId); + builder.HasKey(includedInFilterListId, includesFilterListId); + builder.HasOne(m => m.IncludedInFilterList) + .WithMany(f => (IEnumerable)f.IncludedInFilterLists) + .HasForeignKey(includedInFilterListId); + builder.HasOne(m => m.IncludesFilterList) + .WithMany(f => (IEnumerable)f.IncludesFilterLists) + .HasForeignKey(includesFilterListId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs index 4cb6d0c33..e4d0cdf15 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Software.cs @@ -1,17 +1,29 @@ using System; using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class Software : IHaveSurrogateKey + public class Software { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public string? Description { get; private set; } public Uri? HomeUrl { get; private set; } public Uri? DownloadUrl { get; private set; } public bool SupportsAbpUrlScheme { get; private set; } - public ICollection SoftwareSyntaxes { get; private set; } = new HashSet(); + public ICollection SoftwareSyntaxes { get; } = new HashSet(); + } + + internal class SoftwareTypeConfiguration : IEntityTypeConfiguration where TEntity : Software + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string softwareId = "Id"; + builder.Property(softwareId); + builder.HasKey(softwareId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/SoftwareSyntax.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/SoftwareSyntax.cs index 228fc98a6..f20021517 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/SoftwareSyntax.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/SoftwareSyntax.cs @@ -1,8 +1,27 @@ -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities +using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; + +namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { public class SoftwareSyntax { public Software Software { get; private set; } = null!; public Syntax Syntax { get; private set; } = null!; } + + internal class SoftwareSyntaxTypeConfiguration : IEntityTypeConfiguration + where TEntity : SoftwareSyntax + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string softwareId = nameof(SoftwareSyntax.Software) + "Id"; + const string syntaxId = nameof(SoftwareSyntax.Syntax) + "Id"; + builder.Property(softwareId); + builder.Property(syntaxId); + builder.HasKey(softwareId, syntaxId); + } + } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs index 5b0e7b2ef..00bfd6bb6 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Syntax.cs @@ -1,16 +1,28 @@ using System; using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class Syntax : IHaveSurrogateKey + public class Syntax { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public string? Description { get; private set; } public Uri? Url { get; private set; } - public ICollection FilterListSyntaxes { get; private set; } = new HashSet(); - public ICollection SoftwareSyntaxes { get; private set; } = new HashSet(); + public ICollection FilterListSyntaxes { get; } = new HashSet(); + public ICollection SoftwareSyntaxes { get; } = new HashSet(); + } + + internal class SyntaxTypeConfiguration : IEntityTypeConfiguration where TEntity : Syntax + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string syntaxId = "Id"; + builder.Property(syntaxId); + builder.HasKey(syntaxId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs index 02f4c1662..e30023f19 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/Tag.cs @@ -1,13 +1,26 @@ -using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using System; +using System.Collections.Generic; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class Tag : IHaveSurrogateKey + public class Tag { - public int Id { get; private set; } - public string Name { get; private set; } = null!; + public string Name { get; } = null!; public string? Description { get; private set; } - public ICollection FilterListTags { get; private set; } = new HashSet(); + public ICollection FilterListTags { get; } = new HashSet(); + } + + internal class TagTypeConfiguration : IEntityTypeConfiguration where TEntity : Tag + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string tagId = "Id"; + builder.Property(tagId); + builder.HasKey(tagId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlMirror.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlMirror.cs index 37181daf7..9deac02d7 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlMirror.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlMirror.cs @@ -1,12 +1,25 @@ using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities.Contracts; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { - public class ViewUrlMirror : IHaveSurrogateKey + public class ViewUrlMirror { - public int Id { get; private set; } - public FilterList FilterList { get; private set; } = null!; - public Uri Url { get; private set; } = null!; + public FilterList FilterList { get; } = null!; + public Uri Url { get; } = null!; + } + + internal class ViewUrlMirrorTypeConfiguration : IEntityTypeConfiguration + where TEntity : ViewUrlMirror + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string viewUrlMirrorId = "Id"; + builder.Property(viewUrlMirrorId); + builder.HasKey(viewUrlMirrorId); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlPartial.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlPartial.cs index c68a987be..38dfd2f49 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlPartial.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Entities/ViewUrlPartial.cs @@ -1,4 +1,6 @@ using System; +using Microsoft.EntityFrameworkCore; +using Microsoft.EntityFrameworkCore.Metadata.Builders; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Entities { @@ -6,6 +8,19 @@ public class ViewUrlPartial { public FilterList FilterList { get; private set; } = null!; public int Position { get; private set; } - public Uri Url { get; private set; } = null!; + public Uri Url { get; } = null!; + } + + internal class ViewUrlPartialTypeConfiguration : IEntityTypeConfiguration + where TEntity : ViewUrlPartial + { + public virtual void Configure(EntityTypeBuilder builder) + { + _ = builder ?? throw new ArgumentNullException(nameof(builder)); + + const string filterListId = nameof(ViewUrlPartial.FilterList) + "Id"; + builder.Property(filterListId); + builder.HasKey(filterListId, nameof(ViewUrlPartial.Position)); + } } } \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs index ba0ab3de6..97f5ce09b 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs @@ -2,7 +2,6 @@ using System.Threading; using System.Threading.Tasks; using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings; using Microsoft.EntityFrameworkCore; namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Facade @@ -40,14 +39,21 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) // TODO: rm explicit below once ApplyConfigurationsFromAssembly() works properly modelBuilder.ApplyConfiguration(new DependentTypeConfiguration()); + modelBuilder.ApplyConfiguration(new FilterListTypeConfiguration()); modelBuilder.ApplyConfiguration(new FilterListLanguageTypeConfiguration()); modelBuilder.ApplyConfiguration(new FilterListMaintainerTypeConfiguration()); modelBuilder.ApplyConfiguration(new FilterListSyntaxTypeConfiguration()); modelBuilder.ApplyConfiguration(new FilterListTagTypeConfiguration()); modelBuilder.ApplyConfiguration(new ForkTypeConfiguration()); modelBuilder.ApplyConfiguration(new LanguageTypeConfiguration()); + modelBuilder.ApplyConfiguration(new LicenseTypeConfiguration()); + modelBuilder.ApplyConfiguration(new MaintainerTypeConfiguration()); modelBuilder.ApplyConfiguration(new MergeTypeConfiguration()); + modelBuilder.ApplyConfiguration(new SoftwareTypeConfiguration()); modelBuilder.ApplyConfiguration(new SoftwareSyntaxTypeConfiguration()); + modelBuilder.ApplyConfiguration(new SyntaxTypeConfiguration()); + modelBuilder.ApplyConfiguration(new TagTypeConfiguration()); + modelBuilder.ApplyConfiguration(new ViewUrlMirrorTypeConfiguration()); modelBuilder.ApplyConfiguration(new ViewUrlPartialTypeConfiguration()); } } diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/DependentTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/DependentTypeConfiguration.cs deleted file mode 100644 index fb822c7b2..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/DependentTypeConfiguration.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class DependentTypeConfiguration : IEntityTypeConfiguration where TEntity : Dependent - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string dependencyFilterListId = nameof(Dependent.DependencyFilterList) + "Id"; - const string dependentFilterListId = nameof(Dependent.DependentFilterList) + "Id"; - builder.Property(dependencyFilterListId); - builder.Property(dependentFilterListId); - builder.HasKey(dependencyFilterListId, dependentFilterListId); - builder.HasOne(d => d.DependencyFilterList) - .WithMany(f => (IEnumerable)f.DependencyFilterLists) - .HasForeignKey(dependencyFilterListId); - builder.HasOne(d => d.DependentFilterList) - .WithMany(f => (IEnumerable)f.DependentFilterLists) - .HasForeignKey(dependentFilterListId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListLanguageTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListLanguageTypeConfiguration.cs deleted file mode 100644 index ce2cd2e53..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListLanguageTypeConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class FilterListLanguageTypeConfiguration : IEntityTypeConfiguration - where TEntity : FilterListLanguage - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string filterListId = nameof(FilterListLanguage.FilterList) + "Id"; - const string languageId = nameof(FilterListLanguage.Language) + "Id"; - builder.Property(filterListId); - builder.Property(languageId); - builder.HasKey(filterListId, languageId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListMaintainerTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListMaintainerTypeConfiguration.cs deleted file mode 100644 index ddf6cba56..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListMaintainerTypeConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class FilterListMaintainerTypeConfiguration : IEntityTypeConfiguration - where TEntity : FilterListMaintainer - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string filterListId = nameof(FilterListMaintainer.FilterList) + "Id"; - const string maintainerId = nameof(FilterListMaintainer.Maintainer) + "Id"; - builder.Property(filterListId); - builder.Property(maintainerId); - builder.HasKey(filterListId, maintainerId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListSyntaxTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListSyntaxTypeConfiguration.cs deleted file mode 100644 index cd1024019..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListSyntaxTypeConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class FilterListSyntaxTypeConfiguration : IEntityTypeConfiguration - where TEntity : FilterListSyntax - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string filterListId = nameof(FilterListSyntax.FilterList) + "Id"; - const string syntaxId = nameof(FilterListSyntax.Syntax) + "Id"; - builder.Property(filterListId); - builder.Property(syntaxId); - builder.HasKey(filterListId, syntaxId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListTagTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListTagTypeConfiguration.cs deleted file mode 100644 index f5f6c8e18..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListTagTypeConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class FilterListTagTypeConfiguration : IEntityTypeConfiguration - where TEntity : FilterListTag - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string filterListId = nameof(FilterListTag.FilterList) + "Id"; - const string tagId = nameof(FilterListTag.Tag) + "Id"; - builder.Property(filterListId); - builder.Property(tagId); - builder.HasKey(filterListId, tagId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ForkTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ForkTypeConfiguration.cs deleted file mode 100644 index afa343733..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ForkTypeConfiguration.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class ForkTypeConfiguration : IEntityTypeConfiguration where TEntity : Fork - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string upstreamFilterListId = nameof(Fork.UpstreamFilterList) + "Id"; - const string forkFilterListId = nameof(Fork.ForkFilterList) + "Id"; - builder.Property(upstreamFilterListId); - builder.Property(forkFilterListId); - builder.HasKey(upstreamFilterListId, forkFilterListId); - builder.HasOne(f => f.UpstreamFilterList) - .WithMany(f => (IEnumerable)f.UpstreamFilterLists) - .HasForeignKey(upstreamFilterListId); - builder.HasOne(f => f.ForkFilterList) - .WithMany(f => (IEnumerable)f.ForkFilterLists) - .HasForeignKey(forkFilterListId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/LanguageTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/LanguageTypeConfiguration.cs deleted file mode 100644 index c29c4299c..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/LanguageTypeConfiguration.cs +++ /dev/null @@ -1,18 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class LanguageTypeConfiguration : IEntityTypeConfiguration - where TEntity : Language - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - builder.HasKey(l => l.Iso6391); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/MergeTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/MergeTypeConfiguration.cs deleted file mode 100644 index 1324ea803..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/MergeTypeConfiguration.cs +++ /dev/null @@ -1,28 +0,0 @@ -using System; -using System.Collections.Generic; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class MergeTypeConfiguration : IEntityTypeConfiguration where TEntity : Merge - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string includedInFilterListId = nameof(Merge.IncludedInFilterList) + "Id"; - const string includesFilterListId = nameof(Merge.IncludesFilterList) + "Id"; - builder.Property(includedInFilterListId); - builder.Property(includesFilterListId); - builder.HasKey(includedInFilterListId, includesFilterListId); - builder.HasOne(m => m.IncludedInFilterList) - .WithMany(f => (IEnumerable)f.IncludedInFilterLists) - .HasForeignKey(includedInFilterListId); - builder.HasOne(m => m.IncludesFilterList) - .WithMany(f => (IEnumerable)f.IncludesFilterLists) - .HasForeignKey(includesFilterListId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/SoftwareSyntaxTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/SoftwareSyntaxTypeConfiguration.cs deleted file mode 100644 index 53ed7be7e..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/SoftwareSyntaxTypeConfiguration.cs +++ /dev/null @@ -1,22 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class SoftwareSyntaxTypeConfiguration : IEntityTypeConfiguration - where TEntity : SoftwareSyntax - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string softwareId = nameof(SoftwareSyntax.Software) + "Id"; - const string syntaxId = nameof(SoftwareSyntax.Syntax) + "Id"; - builder.Property(softwareId); - builder.Property(syntaxId); - builder.HasKey(softwareId, syntaxId); - } - } -} \ No newline at end of file diff --git a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ViewUrlPartialTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ViewUrlPartialTypeConfiguration.cs deleted file mode 100644 index c80d1aa9d..000000000 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ViewUrlPartialTypeConfiguration.cs +++ /dev/null @@ -1,20 +0,0 @@ -using System; -using FilterLists.Directory.Infrastructure.Persistence.Queries.Entities; -using Microsoft.EntityFrameworkCore; -using Microsoft.EntityFrameworkCore.Metadata.Builders; - -namespace FilterLists.Directory.Infrastructure.Persistence.Queries.Mappings -{ - internal class ViewUrlPartialTypeConfiguration : IEntityTypeConfiguration - where TEntity : ViewUrlPartial - { - public virtual void Configure(EntityTypeBuilder builder) - { - _ = builder ?? throw new ArgumentNullException(nameof(builder)); - - const string filterListId = nameof(ViewUrlPartial.FilterList) + "Id"; - builder.Property(filterListId); - builder.HasKey(filterListId, nameof(ViewUrlPartial.Position)); - } - } -} \ No newline at end of file