Files
tiku-backend.net/Tiku.Domain/Operations/OperationsEntities.cs

150 lines
6.1 KiB
C#

using System.Text.Json;
using Tiku.Domain.Common;
namespace Tiku.Domain.Operations;
public sealed class Banner : AuditableTenantEntity
{
public Guid? RegionId { get; set; }
public string? LegacyId { get; set; }
public string? Title { get; set; }
public string? Subtitle { get; set; }
public string? Content { get; set; }
public string? ButtonText { get; set; }
public string? ButtonLink { get; set; }
public string? BackgroundColor { get; set; }
public string? BorderColor { get; set; }
public int SortOrder { get; set; }
public bool IsActive { get; set; } = true;
}
public sealed class Faq : AuditableTenantEntity
{
public Guid? RegionId { get; set; }
public string? LegacyId { get; set; }
public string? Question { get; set; }
public string? Answer { get; set; }
public int SortOrder { get; set; }
public bool IsActive { get; set; } = true;
}
public sealed class Announcement : AuditableTenantEntity
{
public string? LegacyId { get; set; }
public string? Content { get; set; }
public string? Link { get; set; }
public string? BackgroundColor { get; set; }
public int SortOrder { get; set; }
public bool IsActive { get; set; } = true;
}
public sealed class AuditLog : Entity
{
public Guid? TenantId { get; set; }
public Guid? ActorUserId { get; set; }
public string Action { get; set; } = string.Empty;
public string? TargetType { get; set; }
public string? TargetId { get; set; }
public JsonElement Details { get; set; } = JsonDefaults.Object();
public string? IpAddress { get; set; }
public string? UserAgent { get; set; }
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class UserNotification : AuditableTenantEntity
{
public Guid UserId { get; set; }
public Guid? SourceId { get; set; }
public Guid? CreatedBy { get; set; }
public string NotificationType { get; set; } = string.Empty;
public NotificationStatus Status { get; set; } = NotificationStatus.Unread;
public NotificationSeverity Severity { get; set; } = NotificationSeverity.Info;
public string Title { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
public string? ActionLabel { get; set; }
public string? ActionPath { get; set; }
public string? SourceType { get; set; }
public string? DedupeKey { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
public DateTimeOffset? ReadAt { get; set; }
}
public sealed class Badge : AuditableTenantEntity
{
public string? LegacyId { get; set; }
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? Category { get; set; }
public string? IconUrl { get; set; }
public int? Level { get; set; }
public string? UnlockType { get; set; }
public string? ConditionField { get; set; }
public string? ConditionOperator { get; set; }
public decimal? ConditionValue { get; set; }
public JsonElement ConditionExtra { get; set; } = JsonDefaults.Object();
public int SortOrder { get; set; }
public bool IsActive { get; set; } = true;
}
public sealed class UserBadge : AuditableTenantEntity
{
public Guid? UserId { get; set; }
public Guid? BadgeId { get; set; }
public Guid? GrantedBy { get; set; }
public string? LegacyId { get; set; }
public string? Note { get; set; }
public DateTimeOffset? GrantedAt { get; set; }
}
public sealed class TenantContentNotification : AuditableTenantEntity
{
public Guid? AdoptionId { get; set; }
public Guid? SourceQuestionBankId { get; set; }
public Guid? CreatedBy { get; set; }
public Guid? ReadBy { get; set; }
public TenantContentNotificationType NotificationType { get; set; } = TenantContentNotificationType.PublicQuestionBankSynced;
public TenantContentNotificationStatus Status { get; set; } = TenantContentNotificationStatus.Unread;
public NotificationSeverity Severity { get; set; } = NotificationSeverity.Info;
public string Title { get; set; } = string.Empty;
public string Message { get; set; } = string.Empty;
public string? ActionLabel { get; set; }
public string? ActionPath { get; set; }
public string? DedupeKey { get; set; }
public JsonElement Metadata { get; set; } = JsonDefaults.Object();
public DateTimeOffset? ReadAt { get; set; }
public DateTimeOffset? ResolvedAt { get; set; }
}
public sealed class TenantThemeTemplate : AuditableEntity
{
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public string? Description { get; set; }
public string? PreviewImageUrl { get; set; }
public JsonElement Theme { get; set; } = JsonDefaults.Object();
public JsonElement PublicAssets { get; set; } = JsonDefaults.Object();
public TenantThemeTemplateStatus Status { get; set; } = TenantThemeTemplateStatus.Active;
public int SortOrder { get; set; } = 100;
}
public sealed class TenantThemeConfig : AuditableTenantEntity
{
public string? ActiveTemplateCode { get; set; }
public JsonElement ActiveTheme { get; set; } = JsonDefaults.Object();
public JsonElement ActivePublicAssets { get; set; } = JsonDefaults.Object();
public string? DraftTemplateCode { get; set; }
public JsonElement DraftTheme { get; set; } = JsonDefaults.Object();
public JsonElement DraftPublicAssets { get; set; } = JsonDefaults.Object();
public TenantThemeConfigStatus Status { get; set; } = TenantThemeConfigStatus.Published;
public DateTimeOffset? PublishedAt { get; set; }
public Guid? PublishedBy { get; set; }
public Guid? DraftUpdatedBy { get; set; }
}
public enum NotificationStatus { Unread, Read, Dismissed, Archived }
public enum NotificationSeverity { Info, Success, Warning, Error }
public enum TenantContentNotificationType { PublicQuestionBankSynced, PublicQuestionBankConflict }
public enum TenantContentNotificationStatus { Unread, Read, Dismissed, Resolved }
public enum TenantThemeTemplateStatus { Active, Disabled }
public enum TenantThemeConfigStatus { Draft, Published }