refactor: consolidate backend into modular monolith

This commit is contained in:
2026-07-30 15:37:31 +08:00
parent 30fd159041
commit 7a73dcbd12
55 changed files with 20409 additions and 1728 deletions

View File

@@ -8,7 +8,6 @@ using Tiku.Application.Tenancy;
using Tiku.Domain.Operations;
using Tiku.Domain.Platform;
using Tiku.Domain.Tenancy;
using Tiku.Infrastructure.Messaging;
using Tiku.Infrastructure.Persistence;
namespace Tiku.Infrastructure.PlatformBilling;
@@ -93,7 +92,6 @@ internal sealed class SaasSubscriptionLifecycleService(
var previousStatus = subscription.Status;
var previousBaseVersionId = subscription.BaseOfferingVersionId;
var oldFeatures = await LoadFeaturesAsync(dbContext, subscription, cancellationToken);
var items = await dbContext.TenantSaasSubscriptionItems
.Where(value => value.TenantId == tenantId && value.SubscriptionId == subscription.Id)
.ToArrayAsync(cancellationToken);
@@ -209,23 +207,6 @@ internal sealed class SaasSubscriptionLifecycleService(
await services.GetRequiredService<ITenantFeatureCacheInvalidator>()
.InvalidateAsync(tenantId, cancellationToken);
var newFeatures = await LoadFeaturesAsync(dbContext, subscription, cancellationToken);
var changedFeatures = oldFeatures.Concat(newFeatures).Distinct(StringComparer.Ordinal).ToArray();
var eventPublisher = services.GetRequiredService<ISecurityEventPublisher>();
var eventVersion = DateTimeOffset.UtcNow.ToUnixTimeMilliseconds();
var correlationId = $"saas-subscription-{subscription.Id:N}-lifecycle-{subscription.LifecycleVersion}";
foreach (var featureCode in changedFeatures)
{
await eventPublisher.CapabilityChangedAsync(
tenantId,
featureCode,
transition,
eventVersion,
correlationId,
cancellationToken);
}
await services.GetRequiredService<ITenantRuntimeCacheInvalidator>()
.InvalidateAsync(tenantId, cancellationToken);
return true;
}
@@ -251,26 +232,4 @@ internal sealed class SaasSubscriptionLifecycleService(
}
}
private static async Task<string[]> LoadFeaturesAsync(
TikuDbContext dbContext,
TenantSaasSubscription subscription,
CancellationToken cancellationToken)
{
var versionIds = await dbContext.TenantSaasSubscriptionItems.AsNoTracking()
.Where(value =>
value.TenantId == subscription.TenantId &&
value.SubscriptionId == subscription.Id &&
value.Status == TenantSaasSubscriptionItemStatus.Active)
.Select(value => value.OfferingVersionId)
.ToArrayAsync(cancellationToken);
if (!versionIds.Contains(subscription.BaseOfferingVersionId))
{
versionIds = [.. versionIds, subscription.BaseOfferingVersionId];
}
return await dbContext.SaasOfferingVersionFeatures.AsNoTracking()
.Where(value => versionIds.Contains(value.OfferingVersionId))
.Select(value => value.FeatureCode)
.Distinct()
.ToArrayAsync(cancellationToken);
}
}