105 lines
3.3 KiB
C#
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
|
|
}
|