Files
xiong 33375a38d7
Some checks failed
ci / release-gate (push) Has been cancelled
refactor(architecture): harden module boundaries
2026-08-04 12:10:36 +08:00

297 lines
14 KiB
C#

using Microsoft.EntityFrameworkCore;
using Microsoft.EntityFrameworkCore.ChangeTracking;
using Microsoft.EntityFrameworkCore.Infrastructure;
using Tiku.Domain.Catalog;
using Tiku.Domain.Commerce;
using Tiku.Domain.Content;
using Tiku.Domain.Growth;
using Tiku.Domain.Identity;
using Tiku.Domain.Import;
using Tiku.Domain.Learning;
using Tiku.Domain.Operations;
using Tiku.Domain.Platform;
using Tiku.Domain.QuestionBanks;
using Tiku.Domain.Tenancy;
namespace Tiku.Infrastructure.Persistence;
/// <summary>
/// Technical unit-of-work surface shared by the module persistence capabilities.
/// Business services must consume one or more owned module capabilities instead of TikuDbContext.
/// </summary>
public interface IModulePersistence
{
long SaveVersion { get; }
DatabaseFacade Database { get; }
ChangeTracker ChangeTracker { get; }
DbSet<TEntity> Set<TEntity>() where TEntity : class;
EntityEntry Entry(object entity);
EntityEntry<TEntity> Entry<TEntity>(TEntity entity) where TEntity : class;
int SaveChanges();
Task<int> SaveChangesAsync(CancellationToken cancellationToken = default);
}
public interface IIdentityPersistence : IModulePersistence
{
DbSet<User> Users { get; }
DbSet<UserIdentity> UserIdentities { get; }
DbSet<TenantMembership> TenantMemberships { get; }
DbSet<SmsVerificationCode> SmsVerificationCodes { get; }
DbSet<SmsChannel> SmsChannels { get; }
DbSet<SmsTemplate> SmsTemplates { get; }
DbSet<SmsSendLog> SmsSendLogs { get; }
DbSet<AuthLoginEvent> AuthLoginEvents { get; }
DbSet<AuthSession> AuthSessions { get; }
DbSet<AuthChallenge> AuthChallenges { get; }
DbSet<SmsSendRateLimit> SmsSendRateLimits { get; }
}
public interface ITenancyPersistence : IModulePersistence
{
DbSet<Tenant> Tenants { get; }
DbSet<TenantDomain> TenantDomains { get; }
DbSet<TenantBranding> TenantBrandings { get; }
DbSet<TenantSettings> TenantSettings { get; }
DbSet<TenantAuthPolicy> TenantAuthPolicies { get; }
DbSet<TenantFrontendConfig> TenantFrontendConfigs { get; }
DbSet<TenantExternalProvider> TenantExternalProviders { get; }
DbSet<TenantSecret> TenantSecrets { get; }
}
public interface ITenantAdministrationPersistence : IModulePersistence
{
DbSet<TenantClass> TenantClasses { get; }
DbSet<TenantClassMember> TenantClassMembers { get; }
DbSet<TenantStudentNote> TenantStudentNotes { get; }
DbSet<TenantStudentFollowup> TenantStudentFollowups { get; }
DbSet<StudentProfile> StudentProfiles { get; }
DbSet<Badge> Badges { get; }
DbSet<UserBadge> UserBadges { get; }
DbSet<TenantContentNotification> TenantContentNotifications { get; }
DbSet<TenantThemeTemplate> TenantThemeTemplates { get; }
DbSet<TenantThemeConfig> TenantThemeConfigs { get; }
DbSet<TenantBillingProfile> TenantBillingProfiles { get; }
DbSet<TenantBillingPolicy> TenantBillingPolicies { get; }
DbSet<TenantOwnerActivationGrant> TenantOwnerActivationGrants { get; }
}
public interface ICatalogPersistence : IModulePersistence
{
DbSet<Region> Regions { get; }
DbSet<RegionModule> RegionModules { get; }
DbSet<ModuleNode> ModuleNodes { get; }
DbSet<School> Schools { get; }
DbSet<Major> Majors { get; }
DbSet<Subject> Subjects { get; }
DbSet<Category> Categories { get; }
DbSet<TaxonomyNode> TaxonomyNodes { get; }
DbSet<QuestionTaxonomyAssignment> QuestionTaxonomyAssignments { get; }
DbSet<ScorelineField> ScorelineFields { get; }
DbSet<ScorelineRecord> ScorelineRecords { get; }
}
public interface IQuestionBankPersistence : IModulePersistence
{
DbSet<QuestionBank> QuestionBanks { get; }
DbSet<Question> Questions { get; }
DbSet<QuestionVersion> QuestionVersions { get; }
DbSet<ContentEntry> ContentEntries { get; }
DbSet<ContentNode> ContentNodes { get; }
DbSet<QuestionCollection> QuestionCollections { get; }
DbSet<QuestionCollectionItem> QuestionCollectionItems { get; }
DbSet<PracticeBlueprint> PracticeBlueprints { get; }
DbSet<QuestionTypeGroup> QuestionTypeGroups { get; }
DbSet<SubjectShare> SubjectShares { get; }
DbSet<ContentImportJob> ContentImportJobs { get; }
DbSet<ContentImportItem> ContentImportItems { get; }
DbSet<ContentImportIssue> ContentImportIssues { get; }
DbSet<TenantQuestionBankPreference> TenantQuestionBankPreferences { get; }
DbSet<TenantQuestionReference> TenantQuestionReferences { get; }
}
public interface IContentAssetPersistence : IModulePersistence
{
DbSet<VocabularyUnit> VocabularyUnits { get; }
DbSet<VocabularyWord> VocabularyWords { get; }
DbSet<HandbookSubject> HandbookSubjects { get; }
DbSet<HandbookChapter> HandbookChapters { get; }
DbSet<HandbookEntry> HandbookEntries { get; }
DbSet<ContentAsset> ContentAssets { get; }
DbSet<ContentAssetAccessEvent> ContentAssetAccessEvents { get; }
DbSet<ContentAssetSecurityScanEvent> ContentAssetSecurityScanEvents { get; }
DbSet<ImageAsset> Images { get; }
DbSet<AppAsset> AppAssets { get; }
DbSet<VideoExplanation> VideoExplanations { get; }
DbSet<QuestionVideo> QuestionVideos { get; }
DbSet<VideoPlaybackProgress> VideoPlaybackProgress { get; }
}
public interface ILearningPersistence : IModulePersistence
{
DbSet<UserWordProgress> UserWordProgress { get; }
DbSet<UserWordFavorite> UserWordFavorites { get; }
DbSet<AiRecommendationReport> AiRecommendationReports { get; }
DbSet<PracticeSession> PracticeSessions { get; }
DbSet<PracticeSessionQuestion> PracticeSessionQuestions { get; }
DbSet<AnswerRecord> AnswerRecords { get; }
DbSet<LearningOperationIdempotency> LearningOperationIdempotencies { get; }
DbSet<FavoriteQuestion> FavoriteQuestions { get; }
DbSet<WrongQuestion> WrongQuestions { get; }
DbSet<RecentPractice> RecentPractices { get; }
DbSet<ExamDate> ExamDates { get; }
DbSet<Report> Reports { get; }
DbSet<ReportStatusEvent> ReportStatusEvents { get; }
DbSet<UserScoreEvent> UserScoreEvents { get; }
DbSet<PracticeDailyUsage> PracticeDailyUsages { get; }
DbSet<PracticeAccessEvent> PracticeAccessEvents { get; }
DbSet<PracticeSessionReport> PracticeSessionReports { get; }
DbSet<PracticeSessionReportSection> PracticeSessionReportSections { get; }
DbSet<DashboardDailyStat> DashboardDailyStats { get; }
DbSet<RevenueDailyStat> RevenueDailyStats { get; }
}
public interface ICommercePersistence : IModulePersistence
{
DbSet<Product> Products { get; }
DbSet<SvipPlan> SvipPlans { get; }
DbSet<Order> Orders { get; }
DbSet<OrderItem> OrderItems { get; }
DbSet<Payment> Payments { get; }
DbSet<PaymentEvent> PaymentEvents { get; }
DbSet<Entitlement> Entitlements { get; }
DbSet<CodeBatch> CodeBatches { get; }
DbSet<ActivationCode> ActivationCodes { get; }
DbSet<Coupon> Coupons { get; }
DbSet<CouponRedemption> CouponRedemptions { get; }
DbSet<CommerceRefundRequest> CommerceRefundRequests { get; }
DbSet<CommerceRefundEvent> CommerceRefundEvents { get; }
DbSet<CommerceReconciliationBatch> CommerceReconciliationBatches { get; }
DbSet<CommerceReconciliationItem> CommerceReconciliationItems { get; }
DbSet<CommerceReconciliationIssue> CommerceReconciliationIssues { get; }
DbSet<CommerceReconciliationIssueEvent> CommerceReconciliationIssueEvents { get; }
DbSet<CommerceAdjustmentVoucher> CommerceAdjustmentVouchers { get; }
DbSet<CommerceAdjustmentVoucherEvent> CommerceAdjustmentVoucherEvents { get; }
}
public interface IPointsPersistence : IModulePersistence
{
DbSet<PointActivityTask> PointActivityTasks { get; }
DbSet<PointActivityClaim> PointActivityClaims { get; }
DbSet<PointExchangeItem> PointExchangeItems { get; }
DbSet<PointExchangeOrder> PointExchangeOrders { get; }
}
public interface IGrowthPersistence : IModulePersistence
{
DbSet<ReferralTrack> ReferralTracks { get; }
DbSet<ReferralCode> ReferralCodes { get; }
DbSet<ReferralLead> ReferralLeads { get; }
DbSet<ReferralTeamEdge> ReferralTeamEdges { get; }
DbSet<ReferralQrcode> ReferralQrcodes { get; }
DbSet<CrmConfig> CrmConfigs { get; }
DbSet<CrmWebhookQueueItem> CrmWebhookQueue { get; }
DbSet<CrmWebhookLog> CrmWebhookLogs { get; }
DbSet<TenantCommissionSetting> TenantCommissionSettings { get; }
DbSet<CommissionSettlement> CommissionSettlements { get; }
DbSet<CommissionSettlementItem> CommissionSettlementItems { get; }
DbSet<CommissionSettlementProof> CommissionSettlementProofs { get; }
DbSet<CommissionSettlementExportEvent> CommissionSettlementExportEvents { get; }
}
public interface IJobsOperationsPersistence : IModulePersistence
{
DbSet<Banner> Banners { get; }
DbSet<Faq> Faqs { get; }
DbSet<Announcement> Announcements { get; }
DbSet<AuditLog> AuditLogs { get; }
DbSet<BackendPermission> BackendPermissions { get; }
DbSet<BackendMenu> BackendMenus { get; }
DbSet<TenantBackendRole> TenantBackendRoles { get; }
DbSet<TenantBackendRolePermission> TenantBackendRolePermissions { get; }
DbSet<TenantBackendRoleMenu> TenantBackendRoleMenus { get; }
DbSet<TenantBackendUserRole> TenantBackendUserRoles { get; }
DbSet<PlatformBackendRole> PlatformBackendRoles { get; }
DbSet<PlatformBackendRolePermission> PlatformBackendRolePermissions { get; }
DbSet<PlatformBackendRoleMenu> PlatformBackendRoleMenus { get; }
DbSet<PlatformBackendUserRole> PlatformBackendUserRoles { get; }
DbSet<AuthorizationScopeVersion> AuthorizationScopeVersions { get; }
DbSet<AuthorizationCacheInvalidation> AuthorizationCacheInvalidations { get; }
DbSet<BackgroundJob> BackgroundJobs { get; }
DbSet<TenantLifecycleOperation> TenantLifecycleOperations { get; }
DbSet<WorkerHeartbeat> WorkerHeartbeats { get; }
DbSet<UserNotification> UserNotifications { get; }
}
public interface IPlatformControlPlanePersistence : IModulePersistence
{
DbSet<PlatformOperationIdempotency> PlatformOperationIdempotencies { get; }
DbSet<PlatformBillingInvoiceReminder> PlatformBillingInvoiceReminders { get; }
DbSet<PlatformAuditAlertRule> PlatformAuditAlertRules { get; }
DbSet<PlatformAuditAlert> PlatformAuditAlerts { get; }
DbSet<PlatformBillingDunningNotificationChannel> PlatformBillingDunningNotificationChannels { get; }
DbSet<PlatformBillingDunningNotificationEvent> PlatformBillingDunningNotificationEvents { get; }
DbSet<PlatformPaymentApp> PlatformPaymentApps { get; }
DbSet<PlatformPaymentChannel> PlatformPaymentChannels { get; }
DbSet<PlatformApprovalPolicy> PlatformApprovalPolicies { get; }
DbSet<PlatformApprovalRequest> PlatformApprovalRequests { get; }
DbSet<PlatformConfigurationDefinition> PlatformConfigurationDefinitions { get; }
DbSet<PlatformConfigurationVersion> PlatformConfigurationVersions { get; }
DbSet<PlatformNotificationTemplate> PlatformNotificationTemplates { get; }
DbSet<PlatformNotificationDelivery> PlatformNotificationDeliveries { get; }
DbSet<SaasFeature> SaasFeatures { get; }
DbSet<PermissionModule> PermissionModules { get; }
DbSet<SaasOffering> SaasOfferings { get; }
DbSet<SaasOfferingVersion> SaasOfferingVersions { get; }
DbSet<SaasOfferingVersionFeature> SaasOfferingVersionFeatures { get; }
DbSet<SaasFeatureLimitDefinition> SaasFeatureLimitDefinitions { get; }
DbSet<SaasOfferingVersionLimit> SaasOfferingVersionLimits { get; }
DbSet<TenantSaasSubscription> TenantSaasSubscriptions { get; }
DbSet<TenantSaasSubscriptionItem> TenantSaasSubscriptionItems { get; }
DbSet<TenantFeatureOverride> TenantFeatureOverrides { get; }
DbSet<TenantFeatureUsage> TenantFeatureUsages { get; }
DbSet<PlatformBillingQuote> PlatformBillingQuotes { get; }
DbSet<PlatformBillingQuoteItem> PlatformBillingQuoteItems { get; }
DbSet<PlatformBillingOrder> PlatformBillingOrders { get; }
DbSet<PlatformBillingOrderItem> PlatformBillingOrderItems { get; }
DbSet<PlatformBillingPayment> PlatformBillingPayments { get; }
DbSet<PlatformBillingPaymentEvent> PlatformBillingPaymentEvents { get; }
DbSet<PlatformBillingRefund> PlatformBillingRefunds { get; }
DbSet<PlatformBillingInvoice> PlatformBillingInvoices { get; }
DbSet<PocketBaseImportRun> PocketBaseImportRuns { get; }
DbSet<PocketBaseRawRecord> PocketBaseRawRecords { get; }
DbSet<PocketBaseImportIssue> PocketBaseImportIssues { get; }
}
// Explicit orchestration capabilities. These are intentionally limited to control-plane and bootstrap workflows;
// feature modules must consume the owned interfaces above directly.
public interface IPlatformAdministrationPersistence : IIdentityPersistence, ITenancyPersistence,
ITenantAdministrationPersistence, IJobsOperationsPersistence, IPlatformControlPlanePersistence
{
}
public interface IPlatformQuestionBankAdministrationPersistence : IQuestionBankPersistence,
IContentAssetPersistence, ITenancyPersistence, IJobsOperationsPersistence
{
}
public interface IPlatformTenantCapabilitiesPersistence : IIdentityPersistence, ITenancyPersistence,
ICommercePersistence, IGrowthPersistence, IJobsOperationsPersistence, IPlatformControlPlanePersistence
{
}
public interface IPlatformBillingPersistence : ITenancyPersistence, ITenantAdministrationPersistence,
IJobsOperationsPersistence, IPlatformControlPlanePersistence
{
}
public interface IOwnerActivationPersistence : IIdentityPersistence, ITenancyPersistence,
ITenantAdministrationPersistence, IJobsOperationsPersistence
{
}
public interface IBootstrapPersistence : IIdentityPersistence, ITenancyPersistence,
ITenantAdministrationPersistence, ICommercePersistence, IGrowthPersistence, IJobsOperationsPersistence,
IPlatformControlPlanePersistence
{
}