forked from xiongyuxing/tiku-backend.net
feat: add content platform operations persistence
This commit is contained in:
@@ -41,6 +41,10 @@ public sealed class ContentAsset : AuditableTenantEntity
|
||||
public JsonElement VerificationDetails { get; set; } = JsonDefaults.Object();
|
||||
public string? PreviewObjectKey { get; set; }
|
||||
public AssetPreviewStatus PreviewStatus { get; set; } = AssetPreviewStatus.None;
|
||||
public AssetSecurityScanStatus SecurityScanStatus { get; set; } = AssetSecurityScanStatus.NotRequired;
|
||||
public DateTimeOffset? SecurityScannedAt { get; set; }
|
||||
public string? SecurityScanProvider { get; set; }
|
||||
public JsonElement SecurityScanSummary { get; set; } = JsonDefaults.Object();
|
||||
public JsonElement SecurityFlags { get; set; } = JsonDefaults.Object();
|
||||
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
||||
}
|
||||
@@ -189,6 +193,16 @@ public enum AssetPreviewStatus
|
||||
Failed
|
||||
}
|
||||
|
||||
public enum AssetSecurityScanStatus
|
||||
{
|
||||
NotRequired,
|
||||
Pending,
|
||||
Scanning,
|
||||
Passed,
|
||||
Failed,
|
||||
Skipped
|
||||
}
|
||||
|
||||
public enum ContentImportType
|
||||
{
|
||||
Questions,
|
||||
|
||||
98
Tiku.Domain/Content/ContentPlatformEntities.cs
Normal file
98
Tiku.Domain/Content/ContentPlatformEntities.cs
Normal file
@@ -0,0 +1,98 @@
|
||||
using System.Text.Json;
|
||||
using Tiku.Domain.Common;
|
||||
|
||||
namespace Tiku.Domain.Content;
|
||||
|
||||
public sealed class ContentAssetAccessEvent : Entity
|
||||
{
|
||||
public Guid TenantId { get; set; }
|
||||
public Guid? AssetId { get; set; }
|
||||
public Guid? UserId { get; set; }
|
||||
public AssetAccessActorRole ActorRole { get; set; } = AssetAccessActorRole.Anonymous;
|
||||
public AssetAccessType AccessType { get; set; } = AssetAccessType.Preview;
|
||||
public string? Visibility { get; set; }
|
||||
public string? AssetType { get; set; }
|
||||
public string? StorageProvider { get; set; }
|
||||
public AssetAccessDisposition? Disposition { get; set; }
|
||||
public int? ExpiresInSeconds { get; set; }
|
||||
public string? SignatureMode { get; set; }
|
||||
public AssetAccessResult Result { get; set; } = AssetAccessResult.Granted;
|
||||
public string? DenyCode { get; set; }
|
||||
public string? IpAddress { get; set; }
|
||||
public string? UserAgent { get; set; }
|
||||
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
||||
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public sealed class ContentAssetSecurityScanEvent : Entity
|
||||
{
|
||||
public Guid TenantId { get; set; }
|
||||
public Guid? AssetId { get; set; }
|
||||
public string Provider { get; set; } = string.Empty;
|
||||
public AssetSecurityScanStatus ScanStatus { get; set; } = AssetSecurityScanStatus.Pending;
|
||||
public AssetSecurityRiskLevel RiskLevel { get; set; } = AssetSecurityRiskLevel.None;
|
||||
public string[] IssueCodes { get; set; } = [];
|
||||
public JsonElement Details { get; set; } = JsonDefaults.Object();
|
||||
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
|
||||
}
|
||||
|
||||
public sealed class QuestionBankGrant : AuditableEntity
|
||||
{
|
||||
public Guid SourceQuestionBankId { get; set; }
|
||||
public Guid? CreatedBy { get; set; }
|
||||
public Guid? UpdatedBy { get; set; }
|
||||
public QuestionBankGrantScope GrantScope { get; set; } = QuestionBankGrantScope.Plans;
|
||||
public string[] AllowedPlanCodes { get; set; } = [];
|
||||
public Guid[] AllowedTenantIds { get; set; } = [];
|
||||
public Guid[] AllowedRegionIds { get; set; } = [];
|
||||
public Guid[] AllowedSubjectIds { get; set; } = [];
|
||||
public QuestionBankGrantStatus Status { get; set; } = QuestionBankGrantStatus.Active;
|
||||
public DateTimeOffset? StartsAt { get; set; }
|
||||
public DateTimeOffset? ExpiresAt { get; set; }
|
||||
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
||||
}
|
||||
|
||||
public sealed class TenantQuestionBankAdoption : AuditableTenantEntity
|
||||
{
|
||||
public Guid SourceQuestionBankId { get; set; }
|
||||
public Guid? GrantId { get; set; }
|
||||
public Guid? TargetQuestionBankId { get; set; }
|
||||
public Guid? TargetEntryId { get; set; }
|
||||
public Guid? TargetCollectionId { get; set; }
|
||||
public Guid? CreatedBy { get; set; }
|
||||
public Guid? UpdatedBy { get; set; }
|
||||
public QuestionBankAdoptionMode AdoptionMode { get; set; } = QuestionBankAdoptionMode.CopiedSnapshot;
|
||||
public QuestionBankAdoptionStatus Status { get; set; } = QuestionBankAdoptionStatus.Active;
|
||||
public QuestionBankAdoptionSyncStatus SyncStatus { get; set; } = QuestionBankAdoptionSyncStatus.Synced;
|
||||
public JsonElement SourceSnapshot { get; set; } = JsonDefaults.Object();
|
||||
public int CopiedQuestionCount { get; set; }
|
||||
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
|
||||
public DateTimeOffset? LastSyncedAt { get; set; }
|
||||
}
|
||||
|
||||
public sealed class AiRecommendationReport : AuditableTenantEntity
|
||||
{
|
||||
public Guid UserId { get; set; }
|
||||
public Guid? RegionId { get; set; }
|
||||
public AiRecommendationReportStatus Status { get; set; } = AiRecommendationReportStatus.Generated;
|
||||
public string Provider { get; set; } = "local_rules";
|
||||
public string? Model { get; set; }
|
||||
public string PromptVersion { get; set; } = "school-recommendation-v1";
|
||||
public JsonElement InputPayload { get; set; } = JsonDefaults.Object();
|
||||
public JsonElement ContextPayload { get; set; } = JsonDefaults.Object();
|
||||
public JsonElement ResultPayload { get; set; } = JsonDefaults.Object();
|
||||
public string? ErrorMessage { get; set; }
|
||||
public DateTimeOffset? GeneratedAt { get; set; }
|
||||
}
|
||||
|
||||
public enum AssetAccessActorRole { Anonymous, Student, TenantAdmin, TenantContentEditor, System }
|
||||
public enum AssetAccessType { Download, Preview, AdminDownload, AdminPreview, UploadSign, UploadConfirm }
|
||||
public enum AssetAccessDisposition { Attachment, Inline }
|
||||
public enum AssetAccessResult { Granted, Denied }
|
||||
public enum AssetSecurityRiskLevel { None, Low, Medium, High, Critical }
|
||||
public enum QuestionBankGrantScope { AllActiveTenants, Plans, Tenants, Mixed }
|
||||
public enum QuestionBankGrantStatus { Active, Disabled, Expired }
|
||||
public enum QuestionBankAdoptionMode { CopiedSnapshot, Reference }
|
||||
public enum QuestionBankAdoptionStatus { Active, SyncPending, Suspended, Archived }
|
||||
public enum QuestionBankAdoptionSyncStatus { Pending, Synced, Failed }
|
||||
public enum AiRecommendationReportStatus { Draft, Generated, Failed }
|
||||
Reference in New Issue
Block a user