fix(dir): 🐛 TPH discriminator doesn't need to be generated 🤦

This commit is contained in:
Collin M. Barrett 2021-11-18 15:18:40 -06:00
parent 891678f8d4
commit 93e4e2c901
2 changed files with 4 additions and 29 deletions

View file

@ -15,11 +15,8 @@ public virtual void Configure(EntityTypeBuilder<Change> builder)
var nr = new SnakeCaseNameRewriter(CultureInfo.InvariantCulture);
builder.ToTable($"{nr.RewriteName(nameof(Change))}s");
// TODO: TDiscriminator should really be AggregateType rather than string but needs name rewriting
builder.HasDiscriminator<string>(nr.RewriteName(nameof(Queries.Entities.Change.AggregateType)))
.HasValue<FilterListChange>(nr.RewriteName(nameof(AggregateType.FilterList)));
builder.HasDiscriminator<AggregateType>(nr.RewriteName(nameof(Queries.Entities.Change.AggregateType)))
.HasValue<FilterListChange>(AggregateType.FilterList);
builder.Property<int>(nameof(Queries.Entities.Change.Id));
}
}

View file

@ -1,6 +1,4 @@
using System.Globalization;
using System.Text.Json;
using EFCore.NamingConventions.Internal;
using System.Text.Json;
using FilterLists.Directory.Domain.Aggregates;
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Metadata.Builders;
@ -17,7 +15,7 @@ public record Change
public string? RejectedReason { get; private init; }
public JsonDocument? AggregateBefore { get; private init; }
public JsonDocument? AggregateAfter { get; private init; }
public AggregateType? AggregateType { get; private init; }
public AggregateType AggregateType { get; private init; }
public int? FilterListId { get; private init; }
public FilterList? FilterList { get; }
public string? LanguageIso6391 { get; private init; }
@ -40,29 +38,9 @@ public virtual void Configure(EntityTypeBuilder<Change> builder)
{
builder.Property(c => c.SubmittedAt)
.HasDefaultValueSql("CURRENT_TIMESTAMP");
builder
.Property(c => c.AggregateType)
.HasComputedColumnSql(BuildComputedAggregateTypeSql(), true);
builder.HasOne(c => c.Language)
.WithMany(l => l.Changes)
.HasForeignKey(c => c.LanguageIso6391)
.HasConstraintName("fk_changes_languages_language_iso6391");
static string BuildComputedAggregateTypeSql()
{
// TODO: register and resolve INameRewriter
var nr = new SnakeCaseNameRewriter(CultureInfo.InvariantCulture);
return $@"
CASE
WHEN {nr.RewriteName(nameof(Change.FilterListId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.FilterList))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.LanguageIso6391))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.Language))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.LicenseId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.License))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.MaintainerId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.Maintainer))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.SoftwareId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.Software))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.SyntaxId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.Syntax))}'::{nr.RewriteName(nameof(AggregateType))}
WHEN {nr.RewriteName(nameof(Change.TagId))} IS NOT NULL THEN '{nr.RewriteName(nameof(AggregateType.Tag))}'::{nr.RewriteName(nameof(AggregateType))}
ELSE NULL
END";
}
}
}