Files
tiku-backend.net/Tiku.Domain/Content/ContentV2QuestionEntities.cs
xiong 3f5957d744
Some checks failed
ci / release-gate (push) Has been cancelled
feat(content): establish v2 learning delivery foundation
2026-08-06 09:52:18 +08:00

105 lines
3.3 KiB
C#

using System.Text.Json;
using Tiku.Domain.Common;
namespace Tiku.Domain.Content;
public sealed class QuestionAsset : AuditableTenantEntity
{
public Guid? FamilyId { get; set; }
public Guid? CurrentRevisionId { get; set; }
public string DeliveryFingerprint { get; set; } = string.Empty;
public QuestionAssetStatus Status { get; set; } = QuestionAssetStatus.Draft;
public Guid? CreatedBy { get; set; }
public Guid? UpdatedBy { get; set; }
}
public sealed class QuestionRevision : Entity, ITenantOwned
{
public Guid QuestionAssetId { get; set; }
public int RevisionNo { get; set; } = 1;
public string QuestionType { get; set; } = "choice";
public string? TypeLabel { get; set; }
public int? Difficulty { get; set; }
public string NormalizedContent { get; set; } = string.Empty;
public string? Content { get; set; }
public JsonElement Options { get; set; } = JsonDefaults.Array();
public int? CorrectOptionIndex { get; set; }
public JsonElement CorrectOptionIndices { get; set; } = JsonDefaults.Array();
public string? AnswerText { get; set; }
public string? Explanation { get; set; }
public JsonElement SubQuestions { get; set; } = JsonDefaults.Array();
public string? CodeLang { get; set; }
public string? CodeTemplate { get; set; }
public string DeliveryFingerprint { get; set; } = string.Empty;
public Guid? CreatedBy { get; set; }
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
public Guid TenantId { get; set; }
}
public sealed class QuestionFamily : AuditableTenantEntity
{
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public Guid? CreatedBy { get; set; }
}
public sealed class QuestionPlacement : AuditableTenantEntity
{
public Guid QuestionAssetOwnerTenantId { get; set; }
public Guid QuestionAssetId { get; set; }
public Guid CurriculumVersionId { get; set; }
public Guid CurriculumNodeId { get; set; }
public Guid AssessmentPolicyVersionId { get; set; }
public int? DifficultyOverride { get; set; }
public QuestionPlacementStatus Status { get; set; } = QuestionPlacementStatus.Draft;
public DateTimeOffset? ValidFrom { get; set; }
public DateTimeOffset? ValidTo { get; set; }
public Guid? CreatedBy { get; set; }
public Guid? UpdatedBy { get; set; }
}
public sealed class QuestionPlacementConcept : Entity, ITenantOwned
{
public Guid PlacementId { get; set; }
public Guid KnowledgeConceptId { get; set; }
public Guid TenantId { get; set; }
}
public sealed class QuestionPlacementRuleGroup : Entity, ITenantOwned
{
public Guid PlacementId { get; set; }
public int GroupOrder { get; set; }
public Guid TenantId { get; set; }
}
public sealed class QuestionPlacementRuleCondition : Entity, ITenantOwned
{
public Guid RuleGroupId { get; set; }
public Guid TargetDimensionDefinitionId { get; set; }
public Guid TargetNodeId { get; set; }
public TargetRuleOperator Operator { get; set; } = TargetRuleOperator.Exact;
public Guid TenantId { get; set; }
}
public enum QuestionAssetStatus
{
Draft,
Published,
Archived
}
public enum QuestionPlacementStatus
{
Draft,
Active,
Retired
}
public enum TargetRuleOperator
{
Exact,
DescendantOf,
NotExact,
NotDescendantOf
}