Files
tiku-backend.net/Tiku.Infrastructure/QuestionBanks/PublicQuestionAccessPolicy.cs
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

29 lines
1.2 KiB
C#

using Microsoft.EntityFrameworkCore;
using Tiku.Application.QuestionBanks;
using Tiku.Application.Security;
using Tiku.Domain.Tenancy;
using Tiku.Infrastructure.Persistence;
namespace Tiku.Infrastructure.QuestionBanks;
public sealed class PublicQuestionAccessPolicy(
ITenancyPersistence 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 subscriptionIsActive = (await featureAccessService.EvaluateAsync(
tenantId,
SaasFeatureCatalog.Practice,
FeatureAccessOperation.Write,
cancellationToken)).Allowed;
if (!tenantIsActive || !subscriptionIsActive)
throw new PublicQuestionAccessDeniedException(
"public_question_subscription_required",
"An active trial or subscription is required to start public question practice.");
}
}