feat: modularize external providers

This commit is contained in:
2026-07-27 17:47:21 +08:00
parent db4c7b4496
commit 70b99e6063
47 changed files with 1219 additions and 667 deletions

View File

@@ -68,7 +68,7 @@ public sealed class PersistenceModelTests
Assert.Contains("practice_session_report_sections", tableNames);
Assert.Contains("dashboard_daily_stats", tableNames);
Assert.Contains("revenue_daily_stats", tableNames);
Assert.Contains("tenant_auth_providers", tableNames);
Assert.Contains("tenant_external_providers", tableNames);
Assert.Contains("tenant_secrets", tableNames);
Assert.Contains("sms_verification_codes", tableNames);
Assert.Contains("auth_login_events", tableNames);
@@ -90,7 +90,6 @@ public sealed class PersistenceModelTests
Assert.Contains("activation_codes", tableNames);
Assert.Contains("coupons", tableNames);
Assert.Contains("coupon_redemptions", tableNames);
Assert.Contains("tenant_payment_accounts", tableNames);
Assert.Contains("tenant_subscriptions", tableNames);
Assert.Contains("tenant_usage_records", tableNames);
Assert.Contains("commerce_refund_requests", tableNames);
@@ -506,7 +505,8 @@ public sealed class PersistenceModelTests
}
[Theory]
[InlineData(typeof(TenantAuthProvider), nameof(TenantAuthProvider.ConfigPublic), "'{}'::jsonb")]
[InlineData(typeof(TenantExternalProvider), nameof(TenantExternalProvider.ConfigPublic), "'{}'::jsonb")]
[InlineData(typeof(TenantExternalProvider), nameof(TenantExternalProvider.Metadata), "'{}'::jsonb")]
[InlineData(typeof(SmsVerificationCode), nameof(SmsVerificationCode.Metadata), "'{}'::jsonb")]
[InlineData(typeof(AuthLoginEvent), nameof(AuthLoginEvent.Metadata), "'{}'::jsonb")]
[InlineData(typeof(AuthSession), nameof(AuthSession.Metadata), "'{}'::jsonb")]
@@ -536,9 +536,10 @@ public sealed class PersistenceModelTests
{
using var context = new TikuDbContext(Options);
AssertHasUniqueIndex<TenantAuthProvider>(
nameof(TenantAuthProvider.TenantId),
nameof(TenantAuthProvider.Provider));
AssertHasUniqueIndex<TenantExternalProvider>(
nameof(TenantExternalProvider.TenantId),
nameof(TenantExternalProvider.Capability),
nameof(TenantExternalProvider.Provider));
AssertHasUniqueIndex<TenantSecret>(
nameof(TenantSecret.TenantId),
nameof(TenantSecret.SecretRef));
@@ -574,7 +575,6 @@ public sealed class PersistenceModelTests
[InlineData(typeof(Payment), nameof(Payment.RawPayload), "'{}'::jsonb")]
[InlineData(typeof(PaymentEvent), nameof(PaymentEvent.Payload), "'{}'::jsonb")]
[InlineData(typeof(Entitlement), nameof(Entitlement.Metadata), "'{}'::jsonb")]
[InlineData(typeof(TenantPaymentAccount), nameof(TenantPaymentAccount.ConfigPublic), "'{}'::jsonb")]
[InlineData(typeof(TenantSubscription), nameof(TenantSubscription.Metadata), "'{}'::jsonb")]
[InlineData(typeof(TenantUsageRecord), nameof(TenantUsageRecord.Metadata), "'{}'::jsonb")]
[InlineData(typeof(CommerceRefundRequest), nameof(CommerceRefundRequest.Metadata), "'{}'::jsonb")]
@@ -622,9 +622,6 @@ public sealed class PersistenceModelTests
AssertHasUniqueIndex<Order>(nameof(Order.TenantId), nameof(Order.OrderNo));
AssertHasUniqueIndex<ActivationCode>(nameof(ActivationCode.TenantId), nameof(ActivationCode.Code));
AssertHasUniqueIndex<TenantPaymentAccount>(
nameof(TenantPaymentAccount.TenantId),
nameof(TenantPaymentAccount.Provider));
AssertHasUniqueIndex<CommerceRefundRequest>(
nameof(CommerceRefundRequest.TenantId),
nameof(CommerceRefundRequest.RefundNo));