feat: add phase five operations foundation

This commit is contained in:
2026-07-28 09:57:50 +08:00
parent 71793a2de0
commit f22f329d33
39 changed files with 4810 additions and 160 deletions

View File

@@ -51,6 +51,111 @@ public sealed class AuditLog : Entity
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class BackendPermission : AuditableEntity
{
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public BackendPermissionArea Area { get; set; } = BackendPermissionArea.Tenant;
public string Module { get; set; } = string.Empty;
public string? Description { get; set; }
public bool IsSystem { get; set; } = true;
public int SortOrder { get; set; } = 100;
}
public sealed class BackendMenu : AuditableEntity
{
public string Code { get; set; } = string.Empty;
public string? ParentCode { get; set; }
public string Title { get; set; } = string.Empty;
public BackendPermissionArea Area { get; set; } = BackendPermissionArea.Tenant;
public string? Path { get; set; }
public string? Icon { get; set; }
public string? PermissionCode { get; set; }
public int SortOrder { get; set; } = 100;
public bool IsActive { get; set; } = true;
}
public sealed class TenantBackendRole : AuditableTenantEntity
{
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public BackendRoleStatus Status { get; set; } = BackendRoleStatus.Active;
public bool IsSystem { get; set; }
public string? Description { get; set; }
public JsonElement DataScope { get; set; } = JsonDefaults.Object();
}
public sealed class TenantBackendRolePermission : Entity, ITenantOwned
{
public Guid TenantId { get; set; }
public Guid RoleId { get; set; }
public string PermissionCode { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class TenantBackendRoleMenu : Entity, ITenantOwned
{
public Guid TenantId { get; set; }
public Guid RoleId { get; set; }
public string MenuCode { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class TenantBackendUserRole : Entity, ITenantOwned
{
public Guid TenantId { get; set; }
public Guid UserId { get; set; }
public Guid RoleId { get; set; }
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class PlatformBackendRole : AuditableEntity
{
public string Code { get; set; } = string.Empty;
public string Name { get; set; } = string.Empty;
public BackendRoleStatus Status { get; set; } = BackendRoleStatus.Active;
public bool IsSystem { get; set; }
public string? Description { get; set; }
}
public sealed class PlatformBackendRolePermission : Entity
{
public Guid RoleId { get; set; }
public string PermissionCode { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class PlatformBackendRoleMenu : Entity
{
public Guid RoleId { get; set; }
public string MenuCode { get; set; } = string.Empty;
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class PlatformBackendUserRole : Entity
{
public Guid UserId { get; set; }
public Guid RoleId { get; set; }
public DateTimeOffset CreatedAt { get; set; } = DateTimeOffset.UtcNow;
}
public sealed class BackgroundJob : AuditableTenantEntity
{
public string JobType { get; set; } = string.Empty;
public BackgroundJobStatus Status { get; set; } = BackgroundJobStatus.Pending;
public JsonElement Payload { get; set; } = JsonDefaults.Object();
public int RetryCount { get; set; }
public int MaxRetries { get; set; } = 3;
public string? LockedBy { get; set; }
public DateTimeOffset? LockExpiresAt { get; set; }
public DateTimeOffset? RunAfter { get; set; }
public DateTimeOffset? StartedAt { get; set; }
public DateTimeOffset? CompletedAt { get; set; }
public string? LastError { get; set; }
public Guid? OutputAssetId { get; set; }
public JsonElement Result { get; set; } = JsonDefaults.Object();
}
public sealed class UserNotification : AuditableTenantEntity
{
public Guid UserId { get; set; }
@@ -147,3 +252,6 @@ public enum TenantContentNotificationType { PublicQuestionBankSynced, PublicQues
public enum TenantContentNotificationStatus { Unread, Read, Dismissed, Resolved }
public enum TenantThemeTemplateStatus { Active, Disabled }
public enum TenantThemeConfigStatus { Draft, Published }
public enum BackendPermissionArea { Platform, Tenant, Both }
public enum BackendRoleStatus { Active, Disabled, Archived }
public enum BackgroundJobStatus { Pending, Processing, Succeeded, Failed, Cancelled }

View File

@@ -162,7 +162,7 @@ public enum TenantExternalProviderCapability { Identity, ObjectStorage, Sms, Pay
public enum TenantExternalProviderStatus { Active, Disabled, Testing }
public enum TenantSecretStatus { Active, Disabled, Rotating }
public enum SmsPurpose { Login, BindPhone, ResetPassword }
public enum SmsVerificationStatus { Pending, Sent, Verified, Expired, Blocked }
public enum SmsVerificationStatus { Pending, Sent, Verified, Expired, Blocked, Failed }
public enum AuthLoginResult { Sent, Success, Failed, Blocked }
public enum SmsRateLimitDimension { Tenant, Phone, Ip, Device }
public enum TenantRoleTemplateStatus { Active, Disabled, Archived }