feat: add scoreline dynamic records

This commit is contained in:
xiong
2026-07-26 18:30:15 +08:00
parent fcf70db8aa
commit 5715869d29
19 changed files with 17069 additions and 13 deletions

View File

@@ -1,6 +1,7 @@
using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Microsoft.EntityFrameworkCore.Metadata;
using Tiku.Domain.Catalog;
using Tiku.Domain.Commerce;
using Tiku.Domain.Content;
using Tiku.Domain.Growth;
@@ -30,7 +31,7 @@ public sealed class PersistenceModelTests
.Select(entity => entity.GetTableName())
.ToHashSet(StringComparer.Ordinal);
Assert.Equal(124, tableNames.Count);
Assert.Equal(126, tableNames.Count);
Assert.Contains("tenants", tableNames);
Assert.Contains("tenant_settings", tableNames);
Assert.Contains("content_entries", tableNames);
@@ -135,6 +136,8 @@ public sealed class PersistenceModelTests
Assert.Contains("pb_import_issues", tableNames);
Assert.Contains("questions", tableNames);
Assert.Contains("question_versions", tableNames);
Assert.Contains("scoreline_fields", tableNames);
Assert.Contains("scoreline_records", tableNames);
Assert.Contains("answer_records", tableNames);
}
@@ -277,6 +280,41 @@ public sealed class PersistenceModelTests
properties => Assert.Contains("TenantId", properties));
}
[Theory]
[InlineData(typeof(ScorelineField), nameof(ScorelineField.Options), "'[]'::jsonb")]
[InlineData(typeof(ScorelineRecord), nameof(ScorelineRecord.FieldValues), "'{}'::jsonb")]
public void Scoreline_json_properties_are_mapped_to_jsonb(
Type entityType,
string propertyName,
string expectedDefaultValueSql)
{
using var context = new TikuDbContext(Options);
var property = context.Model.FindEntityType(entityType)!
.FindProperty(propertyName)!;
Assert.Equal("jsonb", property.GetColumnType());
Assert.Equal(expectedDefaultValueSql, property.GetDefaultValueSql());
Assert.Equal(typeof(System.Text.Json.JsonElement), property.ClrType);
}
[Fact]
public void Scoreline_relations_include_tenant_in_foreign_keys()
{
using var context = new TikuDbContext(Options);
var foreignKeys = context.Model.FindEntityType(typeof(ScorelineRecord))!
.GetForeignKeys()
.Where(foreignKey => foreignKey.Properties.Count > 1)
.Select(foreignKey => foreignKey.Properties
.Select(property => property.Name)
.ToArray());
Assert.All(
foreignKeys,
properties => Assert.Contains("TenantId", properties));
}
[Fact]
public void Word_user_join_tables_have_tenant_scoped_unique_indexes()
{