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 51ae21a3c..ba0ab3de6 100644 --- a/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Facade/DirectoryQueryDbContext.cs @@ -26,7 +26,8 @@ public override int SaveChanges(bool acceptAllChangesOnSuccess) throw new InvalidOperationException("This context is read-only."); } - public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, CancellationToken cancellationToken = new CancellationToken()) + public override Task SaveChangesAsync(bool acceptAllChangesOnSuccess, + CancellationToken cancellationToken = default) { throw new InvalidOperationException("This context is read-only."); } @@ -35,13 +36,19 @@ protected override void OnModelCreating(ModelBuilder modelBuilder) { _ = modelBuilder ?? throw new ArgumentNullException(nameof(modelBuilder)); - //TODO: figure out why this extension doesn't load configs modelBuilder.ApplyConfigurationsFromAssembly(GetType().Assembly); + // TODO: rm explicit below once ApplyConfigurationsFromAssembly() works properly modelBuilder.ApplyConfiguration(new DependentTypeConfiguration()); 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 MergeTypeConfiguration()); + modelBuilder.ApplyConfiguration(new SoftwareSyntaxTypeConfiguration()); + modelBuilder.ApplyConfiguration(new ViewUrlPartialTypeConfiguration()); } } } \ 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 new file mode 100644 index 000000000..b6516b416 --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListMaintainerTypeConfiguration.cs @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..093f9f1ab --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListSyntaxTypeConfiguration.cs @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..1d1f9d192 --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/FilterListTagTypeConfiguration.cs @@ -0,0 +1,22 @@ +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/LanguageTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/LanguageTypeConfiguration.cs new file mode 100644 index 000000000..c29c4299c --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/LanguageTypeConfiguration.cs @@ -0,0 +1,18 @@ +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/SoftwareSyntaxTypeConfiguration.cs b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/SoftwareSyntaxTypeConfiguration.cs new file mode 100644 index 000000000..c90f6b9a3 --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/SoftwareSyntaxTypeConfiguration.cs @@ -0,0 +1,22 @@ +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 new file mode 100644 index 000000000..af03d5e39 --- /dev/null +++ b/directory/src/FilterLists.Directory.Infrastructure/Persistence/Queries/Mappings/ViewUrlPartialTypeConfiguration.cs @@ -0,0 +1,20 @@ +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