feat: 实现租户管理及套餐流程

This commit is contained in:
2025-12-03 16:37:50 +08:00
parent 151f64d41a
commit a536a554c2
34 changed files with 1732 additions and 2 deletions

View File

@@ -0,0 +1,76 @@
using TakeoutSaaS.Application.App.Tenants.Dto;
using TakeoutSaaS.Domain.Tenants.Entities;
namespace TakeoutSaaS.Application.App.Tenants;
/// <summary>
/// 租户 DTO 映射助手。
/// </summary>
internal static class TenantMapping
{
public static TenantDto ToDto(Tenant tenant, TenantSubscription? subscription, TenantVerificationProfile? verification)
=> new()
{
Id = tenant.Id,
Code = tenant.Code,
Name = tenant.Name,
ShortName = tenant.ShortName,
ContactName = tenant.ContactName,
ContactPhone = tenant.ContactPhone,
ContactEmail = tenant.ContactEmail,
Status = tenant.Status,
VerificationStatus = verification?.Status ?? Domain.Tenants.Enums.TenantVerificationStatus.Draft,
CurrentPackageId = subscription?.TenantPackageId,
EffectiveFrom = subscription?.EffectiveFrom ?? tenant.EffectiveFrom,
EffectiveTo = subscription?.EffectiveTo ?? tenant.EffectiveTo,
AutoRenew = subscription?.AutoRenew ?? false
};
public static TenantVerificationDto? ToVerificationDto(this TenantVerificationProfile? profile)
=> profile == null
? null
: new TenantVerificationDto
{
Id = profile.Id,
TenantId = profile.TenantId,
Status = profile.Status,
BusinessLicenseNumber = profile.BusinessLicenseNumber,
BusinessLicenseUrl = profile.BusinessLicenseUrl,
LegalPersonName = profile.LegalPersonName,
LegalPersonIdNumber = profile.LegalPersonIdNumber,
BankAccountNumber = profile.BankAccountNumber,
BankName = profile.BankName,
ReviewRemarks = profile.ReviewRemarks,
ReviewedByName = profile.ReviewedByName,
ReviewedAt = profile.ReviewedAt
};
public static TenantSubscriptionDto? ToSubscriptionDto(this TenantSubscription? subscription)
=> subscription == null
? null
: new TenantSubscriptionDto
{
Id = subscription.Id,
TenantId = subscription.TenantId,
TenantPackageId = subscription.TenantPackageId,
Status = subscription.Status,
EffectiveFrom = subscription.EffectiveFrom,
EffectiveTo = subscription.EffectiveTo,
NextBillingDate = subscription.NextBillingDate,
AutoRenew = subscription.AutoRenew
};
public static TenantAuditLogDto ToDto(this TenantAuditLog log)
=> new()
{
Id = log.Id,
TenantId = log.TenantId,
Action = log.Action,
Title = log.Title,
Description = log.Description,
OperatorName = log.OperatorName,
PreviousStatus = log.PreviousStatus,
CurrentStatus = log.CurrentStatus,
CreatedAt = log.CreatedAt
};
}