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

51 lines
1.8 KiB
C#

using Tiku.Application.Storage;
using Tiku.Domain.Operations;
namespace Tiku.Application.Tenancy;
public sealed record TenantArchivePreview(
Guid TenantId,
bool CanArchive,
bool HasRecentSuccessfulExport,
IReadOnlyCollection<string> Blockers);
public sealed record TenantLifecycleOperationItem(
Guid Id,
Guid TenantId,
TenantLifecycleOperationType OperationType,
TenantLifecycleOperationStatus Status,
Guid RequestedBy,
Guid? TargetUserId,
Guid? ExportAssetId,
string? Reason,
string? LastError,
DateTimeOffset CreatedAt,
DateTimeOffset? CompletedAt);
public interface ITenantLifecycleService
{
Task<TenantArchivePreview> PreviewArchiveAsync(Guid tenantId, CancellationToken cancellationToken = default);
Task<TenantLifecycleOperationItem> CreateExportAsync(Guid tenantId, Guid actorUserId,
CancellationToken cancellationToken = default);
Task<TenantLifecycleOperationItem?> GetOperationAsync(Guid tenantId, Guid operationId,
CancellationToken cancellationToken = default);
Task<ObjectStorageSignedUrl> SignExportDownloadAsync(Guid tenantId, Guid operationId,
CancellationToken cancellationToken = default);
Task<TenantLifecycleOperationItem> ArchiveAsync(Guid tenantId, Guid actorUserId, string reason,
CancellationToken cancellationToken = default);
Task<TenantLifecycleOperationItem> RestoreAsync(Guid tenantId, Guid actorUserId, string reason,
CancellationToken cancellationToken = default);
Task<TenantLifecycleOperationItem> TransferOwnerAsync(Guid tenantId, Guid actorUserId, Guid targetUserId,
string reason, CancellationToken cancellationToken = default);
}
public sealed class TenantLifecycleException(string code, string message) : Exception(message)
{
public string Code { get; } = code;
}