feat(learning): harden access and practice sessions

This commit is contained in:
2026-08-05 14:01:36 +08:00
parent 603bc24c26
commit df31c3a669
88 changed files with 72411 additions and 543 deletions

View File

@@ -70,36 +70,13 @@ internal sealed class QuestionManagementService(DirectContentServiceDependencies
actor.TenantId,
SaasQuotaMetricCatalog.PrivateQuestionCount,
cancellationToken: cancellationToken);
QuestionVersion? version;
if (command.CreateVersion || !question.CurrentVersionId.HasValue)
{
var nextVersionNo = await questionBankPersistence.QuestionVersions
.Where(item => item.TenantId == actor.TenantId && item.QuestionId == question.Id)
.Select(item => (int?)item.VersionNo)
.MaxAsync(cancellationToken) ?? 0;
version = BuildQuestionVersion(actor, question.Id, nextVersionNo + 1, command);
questionBankPersistence.QuestionVersions.Add(version);
question.CurrentVersionId = version.Id;
}
else
{
version = await questionBankPersistence.QuestionVersions.SingleOrDefaultAsync(
item =>
item.TenantId == actor.TenantId &&
item.QuestionId == question.Id &&
item.Id == question.CurrentVersionId.Value,
cancellationToken);
if (version is null)
{
version = BuildQuestionVersion(actor, question.Id, 1, command);
questionBankPersistence.QuestionVersions.Add(version);
question.CurrentVersionId = version.Id;
}
else
{
ApplyQuestionVersion(version, command);
}
}
var nextVersionNo = await questionBankPersistence.QuestionVersions
.Where(item => item.TenantId == actor.TenantId && item.QuestionId == question.Id)
.Select(item => (int?)item.VersionNo)
.MaxAsync(cancellationToken) ?? 0;
var version = BuildQuestionVersion(actor, question.Id, nextVersionNo + 1, command);
questionBankPersistence.QuestionVersions.Add(version);
question.CurrentVersionId = version.Id;
await SyncPrimaryCollectionItemAsync(actor, question, cancellationToken);