Files
tiku-backend.net/Tiku.Domain/Content/ContentPlatformEntities.cs
xiong c497a3ca8d
Some checks failed
ci / release-gate (push) Has been cancelled
清理代码
2026-08-03 12:31:39 +08:00

126 lines
3.7 KiB
C#

using System.Text.Json;
using Tiku.Domain.Common;
namespace Tiku.Domain.Content;
public sealed class ContentAssetAccessEvent : Entity, ITenantOwned
{
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 Guid TenantId { get; set; }
}
public sealed class ContentAssetSecurityScanEvent : Entity, ITenantOwned
{
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 Guid TenantId { get; set; }
}
public sealed class TenantQuestionBankPreference : AuditableTenantEntity
{
public Guid QuestionBankOwnerTenantId { get; set; }
public Guid QuestionBankId { get; set; }
public bool IsVisible { get; set; } = true;
public string? Alias { get; set; }
public int SortOrder { get; set; }
public string? NavigationLocation { get; set; }
public Guid? CreatedBy { get; set; }
public Guid? UpdatedBy { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
}
public sealed class TenantQuestionReference : AuditableTenantEntity
{
public Guid QuestionOwnerTenantId { get; set; }
public Guid QuestionId { get; set; }
public QuestionSource Source { get; set; } = QuestionSource.Tenant;
public Guid? CreatedBy { 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 QuestionSource
{
Platform,
Tenant
}
public enum AiRecommendationReportStatus
{
Draft,
Generated,
Failed
}