126 lines
3.7 KiB
C#
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
|
|
} |