forked from xiongyuxing/tiku-backend.net
feat(saas): implement marketplace and tenant onboarding
This commit is contained in:
@@ -1,27 +1,25 @@
|
||||
using Microsoft.EntityFrameworkCore;
|
||||
using Tiku.Application.QuestionBanks;
|
||||
using Tiku.Domain.Commerce;
|
||||
using Tiku.Application.Security;
|
||||
using Tiku.Domain.Tenancy;
|
||||
using Tiku.Infrastructure.Persistence;
|
||||
|
||||
namespace Tiku.Infrastructure.QuestionBanks;
|
||||
|
||||
public sealed class PublicQuestionAccessPolicy(TikuDbContext dbContext) : IPublicQuestionAccessPolicy
|
||||
public sealed class PublicQuestionAccessPolicy(
|
||||
TikuDbContext dbContext,
|
||||
IFeatureAccessService featureAccessService) : IPublicQuestionAccessPolicy
|
||||
{
|
||||
public async Task EnsureCanStartAsync(Guid tenantId, CancellationToken cancellationToken = default)
|
||||
{
|
||||
var tenantIsActive = await dbContext.Tenants.AsNoTracking().AnyAsync(
|
||||
tenant => tenant.Id == tenantId && tenant.Status == TenantStatus.Active,
|
||||
cancellationToken);
|
||||
var now = DateTimeOffset.UtcNow;
|
||||
var subscriptionIsActive = await dbContext.TenantSubscriptions.AsNoTracking().AnyAsync(
|
||||
subscription =>
|
||||
subscription.TenantId == tenantId &&
|
||||
(subscription.Status == TenantSubscriptionStatus.Trial ||
|
||||
subscription.Status == TenantSubscriptionStatus.Active) &&
|
||||
(!subscription.StartsAt.HasValue || subscription.StartsAt <= now) &&
|
||||
(!subscription.ExpiresAt.HasValue || subscription.ExpiresAt > now),
|
||||
cancellationToken);
|
||||
var subscriptionIsActive = (await featureAccessService.EvaluateAsync(
|
||||
tenantId,
|
||||
SaasFeatureCatalog.Practice,
|
||||
FeatureAccessOperation.Write,
|
||||
cancellationToken)).Allowed;
|
||||
|
||||
if (!tenantIsActive || !subscriptionIsActive)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user