410 lines
10 KiB
C#
410 lines
10 KiB
C#
using System.Text.Json;
|
|
using Tiku.Domain.Common;
|
|
using Tiku.Domain.Operations;
|
|
using Tiku.Domain.Tenancy;
|
|
|
|
namespace Tiku.Application.TenantAdmin;
|
|
|
|
public sealed record TenantAdminActor(Guid TenantId, Guid UserId, TenantRole Role = TenantRole.TenantAdmin);
|
|
|
|
public sealed record TenantAdminClassFilter(
|
|
Guid? RegionId = null,
|
|
string? Status = null,
|
|
string? Keyword = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminClassMemberFilter(
|
|
Guid ClassId,
|
|
string? MemberType = null,
|
|
string? Status = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminStudentFilter(
|
|
Guid? RegionId = null,
|
|
Guid? ClassId = null,
|
|
string? Status = null,
|
|
string? Keyword = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminStudentActivityFilter(
|
|
Guid? StudentUserId = null,
|
|
string? Status = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminMemberFilter(
|
|
string? Role = null,
|
|
string? Status = null,
|
|
string? Keyword = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminAuditLogFilter(
|
|
string? Action = null,
|
|
string? TargetType = null,
|
|
Guid? ActorUserId = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record TenantAdminRoleTemplateFilter(
|
|
string? Status = null,
|
|
int? Limit = null);
|
|
|
|
public sealed record UpsertTenantAdminClassCommand(
|
|
Guid? Id,
|
|
Guid? RegionId,
|
|
string? LegacyId,
|
|
string? Code,
|
|
string Name,
|
|
string? Description,
|
|
string? Status,
|
|
int? Order,
|
|
JsonElement Metadata);
|
|
|
|
public sealed record UserLookupCommand(
|
|
Guid? UserId,
|
|
string? Username,
|
|
string? Email,
|
|
string? Phone,
|
|
string? Name,
|
|
string? AvatarUrl);
|
|
|
|
public sealed record UpsertTenantAdminClassMemberCommand(
|
|
Guid ClassId,
|
|
UserLookupCommand User,
|
|
string? MemberType,
|
|
string? Status,
|
|
JsonElement Metadata);
|
|
|
|
public sealed record UpsertTenantAdminStudentCommand(
|
|
UserLookupCommand User,
|
|
Guid? RegionId,
|
|
Guid? SelectedSchoolId,
|
|
Guid? SelectedMajorId,
|
|
string? AvatarPreset,
|
|
JsonElement Stats,
|
|
JsonElement Progress,
|
|
JsonElement ModuleSelections,
|
|
JsonElement RawProfile);
|
|
|
|
public sealed record UpdateTenantAdminStudentStatusCommand(
|
|
Guid UserId,
|
|
string? Status,
|
|
string? Reason);
|
|
|
|
public sealed record UpsertTenantAdminStudentNoteCommand(
|
|
Guid? Id,
|
|
Guid StudentUserId,
|
|
string? NoteType,
|
|
string Content,
|
|
string? Visibility,
|
|
bool? IsPinned,
|
|
JsonElement Metadata);
|
|
|
|
public sealed record UpsertTenantAdminStudentFollowupCommand(
|
|
Guid? Id,
|
|
Guid StudentUserId,
|
|
Guid? AssignedToUserId,
|
|
Guid? ClassId,
|
|
string Title,
|
|
string? Description,
|
|
string? FollowupType,
|
|
string? Priority,
|
|
string? Status,
|
|
DateTimeOffset? DueAt,
|
|
JsonElement Metadata);
|
|
|
|
public sealed record UpsertTenantAdminMemberCommand(
|
|
Guid? MembershipId,
|
|
UserLookupCommand User,
|
|
string? Role,
|
|
string? Status,
|
|
Guid? RoleTemplateId,
|
|
JsonElement Permissions,
|
|
string? PrimaryRole);
|
|
|
|
public sealed record UpsertTenantAdminRoleTemplateCommand(
|
|
Guid? Id,
|
|
string? Code,
|
|
string Name,
|
|
string? Description,
|
|
string? BaseRole,
|
|
string? Status,
|
|
JsonElement Permissions,
|
|
JsonElement MenuPermissions,
|
|
JsonElement ModulePermissions,
|
|
JsonElement FieldPermissions,
|
|
JsonElement DataScope,
|
|
int? Order);
|
|
|
|
public sealed record UpsertTenantBrandingCommand(
|
|
string BrandName,
|
|
string? ShortName,
|
|
string? Slogan,
|
|
string? OrganizationName,
|
|
string? LogoUrl,
|
|
string? FaviconUrl,
|
|
string? ServiceWechat,
|
|
string? ServiceAccountName);
|
|
|
|
public sealed record UpsertTenantSettingsCommand(
|
|
JsonElement FeatureFlags,
|
|
JsonElement AdminFeatureFlags,
|
|
JsonElement PublicConfig);
|
|
|
|
public sealed record PreviewTenantThemeCommand(
|
|
string TemplateCode,
|
|
JsonElement Theme,
|
|
JsonElement PublicAssets);
|
|
|
|
public sealed record PublishTenantThemeCommand(
|
|
bool UseDraft,
|
|
string? TemplateCode,
|
|
JsonElement Theme,
|
|
JsonElement PublicAssets);
|
|
|
|
public sealed record CreateTenantDomainCommand(
|
|
string Host,
|
|
string? DomainType,
|
|
bool IsPrimary);
|
|
|
|
public sealed record UpsertTenantAuthProviderCommand(
|
|
string Provider,
|
|
string? Status,
|
|
string? DisplayName,
|
|
JsonElement ConfigPublic);
|
|
|
|
public sealed record TenantAdminClassList(
|
|
IReadOnlyCollection<TenantAdminClassItem> Items,
|
|
bool Scoped);
|
|
|
|
public sealed record TenantAdminStudentList(
|
|
IReadOnlyCollection<TenantAdminStudentItem> Items,
|
|
bool Scoped);
|
|
|
|
public sealed record TenantAdminClassItem(
|
|
Guid Id,
|
|
Guid? RegionId,
|
|
string? RegionName,
|
|
string? LegacyId,
|
|
string? Code,
|
|
string Name,
|
|
string? Description,
|
|
TenantRecordStatus Status,
|
|
int Order,
|
|
JsonElement Metadata,
|
|
int StudentCount,
|
|
int StaffCount,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminClassMemberItem(
|
|
Guid Id,
|
|
Guid ClassId,
|
|
Guid UserId,
|
|
TenantClassMemberType MemberType,
|
|
TenantClassMemberStatus Status,
|
|
DateTimeOffset JoinedAt,
|
|
DateTimeOffset? LeftAt,
|
|
JsonElement Metadata,
|
|
TenantAdminUserSummary User);
|
|
|
|
public sealed record TenantAdminUserSummary(
|
|
Guid Id,
|
|
string? Username,
|
|
string? Email,
|
|
string? Phone,
|
|
string? Name,
|
|
string? AvatarUrl,
|
|
string PrimaryRole);
|
|
|
|
public sealed record TenantAdminStudentItem(
|
|
Guid MembershipId,
|
|
Guid UserId,
|
|
MembershipStatus Status,
|
|
TenantAdminUserSummary User,
|
|
Guid? ProfileId,
|
|
string AvatarPreset,
|
|
Guid? RegionId,
|
|
string? RegionName,
|
|
Guid? SelectedSchoolId,
|
|
string? SelectedSchoolName,
|
|
Guid? SelectedMajorId,
|
|
string? SelectedMajorName,
|
|
JsonElement Stats,
|
|
JsonElement Progress,
|
|
JsonElement ModuleSelections,
|
|
IReadOnlyCollection<TenantAdminStudentClassSummary> Classes,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminStudentClassSummary(
|
|
Guid ClassId,
|
|
string ClassName,
|
|
string? ClassCode,
|
|
TenantClassMemberType MemberType,
|
|
DateTimeOffset JoinedAt);
|
|
|
|
public sealed record TenantAdminStudentStatusItem(
|
|
Guid MembershipId,
|
|
Guid UserId,
|
|
TenantRole Role,
|
|
MembershipStatus Status,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminStudentNoteItem(
|
|
Guid Id,
|
|
Guid StudentUserId,
|
|
StudentNoteType NoteType,
|
|
string Content,
|
|
StudentNoteVisibility Visibility,
|
|
bool IsPinned,
|
|
JsonElement Metadata,
|
|
Guid? CreatedBy,
|
|
Guid? UpdatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminStudentFollowupItem(
|
|
Guid Id,
|
|
Guid StudentUserId,
|
|
Guid? AssignedToUserId,
|
|
Guid? ClassId,
|
|
string Title,
|
|
string? Description,
|
|
StudentFollowupType FollowupType,
|
|
StudentFollowupPriority Priority,
|
|
StudentFollowupStatus Status,
|
|
DateTimeOffset? DueAt,
|
|
DateTimeOffset? CompletedAt,
|
|
Guid? CompletedBy,
|
|
JsonElement Metadata,
|
|
Guid? CreatedBy,
|
|
Guid? UpdatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminMemberItem(
|
|
Guid MembershipId,
|
|
Guid UserId,
|
|
TenantRole Role,
|
|
MembershipStatus Status,
|
|
JsonElement Permissions,
|
|
Guid? RoleTemplateId,
|
|
string? RoleTemplateCode,
|
|
string? RoleTemplateName,
|
|
string? LegacyRole,
|
|
TenantAdminUserSummary User,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAdminAuditLogItem(
|
|
Guid Id,
|
|
Guid? ActorUserId,
|
|
string Action,
|
|
string? TargetType,
|
|
string? TargetId,
|
|
JsonElement Details,
|
|
string? IpAddress,
|
|
string? UserAgent,
|
|
string? ActorName,
|
|
string? ActorPhone,
|
|
DateTimeOffset CreatedAt);
|
|
|
|
public sealed record TenantAdminPermissionMatrix(
|
|
TenantAdminCurrentPermission Current,
|
|
IReadOnlyCollection<TenantAdminPermissionCatalogItem> Permissions,
|
|
IReadOnlyDictionary<string, IReadOnlyCollection<string>> RoleDefaults);
|
|
|
|
public sealed record TenantAdminCurrentPermission(
|
|
Guid UserId,
|
|
Guid TenantId,
|
|
TenantRole Role);
|
|
|
|
public sealed record TenantAdminPermissionCatalogItem(string Key, string Label);
|
|
|
|
public sealed record TenantAdminRoleTemplateItem(
|
|
Guid Id,
|
|
string Code,
|
|
string Name,
|
|
string? Description,
|
|
TenantRole BaseRole,
|
|
TenantRoleTemplateStatus Status,
|
|
JsonElement Permissions,
|
|
JsonElement MenuPermissions,
|
|
JsonElement ModulePermissions,
|
|
JsonElement FieldPermissions,
|
|
JsonElement DataScope,
|
|
bool IsSystem,
|
|
int Order,
|
|
Guid? CreatedBy,
|
|
Guid? UpdatedBy,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantBrandingItem(
|
|
Guid TenantId,
|
|
string BrandName,
|
|
string? ShortName,
|
|
string? Slogan,
|
|
string? OrganizationName,
|
|
string? LogoUrl,
|
|
string? FaviconUrl,
|
|
string? ServiceWechat,
|
|
string? ServiceAccountName,
|
|
JsonElement Theme,
|
|
JsonElement PublicAssets,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantSettingsItem(
|
|
Guid TenantId,
|
|
JsonElement FeatureFlags,
|
|
JsonElement AdminFeatureFlags,
|
|
JsonElement PublicConfig,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantThemeTemplateItem(
|
|
string Code,
|
|
string Name,
|
|
string? Description,
|
|
string? PreviewImageUrl,
|
|
JsonElement Theme,
|
|
JsonElement PublicAssets,
|
|
int Order);
|
|
|
|
public sealed record TenantThemeItem(
|
|
Guid TenantId,
|
|
string? ActiveTemplateCode,
|
|
JsonElement ActiveTheme,
|
|
JsonElement ActivePublicAssets,
|
|
string? DraftTemplateCode,
|
|
JsonElement DraftTheme,
|
|
JsonElement DraftPublicAssets,
|
|
TenantThemeConfigStatus Status,
|
|
DateTimeOffset? PublishedAt,
|
|
Guid? PublishedBy,
|
|
Guid? DraftUpdatedBy,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantDomainItem(
|
|
Guid Id,
|
|
string Host,
|
|
TenantDomainType DomainType,
|
|
TenantDomainStatus Status,
|
|
bool IsPrimary,
|
|
string? VerificationToken,
|
|
DateTimeOffset? VerifiedAt,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed record TenantAuthProviderItem(
|
|
Guid Id,
|
|
string Provider,
|
|
TenantAuthProviderStatus Status,
|
|
string? DisplayName,
|
|
JsonElement ConfigPublic,
|
|
DateTimeOffset CreatedAt,
|
|
DateTimeOffset UpdatedAt);
|
|
|
|
public sealed class TenantAdminDirectException(string message, string code) : Exception(message)
|
|
{
|
|
public string Code { get; } = code;
|
|
}
|