From a8656ca9825dd1b1c048ef5283f6036fda0e7b16 Mon Sep 17 00:00:00 2001 From: movingsam Date: Sat, 21 Feb 2026 13:22:08 +0800 Subject: [PATCH] refactor(platform): migrate Tenant to anemia model, use Manager pattern - Convert Tenant to anemia model with long Id (no strong-typed ID) - Add ApplicationUser, ApplicationRole to Platform.Domain (inherit Identity) - Add TenantInfo value object for user-tenant redundancy - Implement TenantManager/TenantStore in Platform.Infrastructure - Update PlatformDbContext to inherit IdentityDbContext - Migrate AuthService and Console to use Platform entities - Remove old TenantRepository (replaced by TenantManager) - Update AGENTS.md documentation --- Controllers/StatsController.cs | 2 +- Controllers/TenantsController.cs | 34 +++++++++++++++++++++++--------- 2 files changed, 26 insertions(+), 10 deletions(-) diff --git a/Controllers/StatsController.cs b/Controllers/StatsController.cs index 0dba0ee..ff9c816 100644 --- a/Controllers/StatsController.cs +++ b/Controllers/StatsController.cs @@ -26,7 +26,7 @@ public class StatsController( var tomorrow = today.AddDays(1); var userCount = await context.Users.CountAsync(u => !u.IsDeleted); - var tenantCount = await platformDbContext.Tenants.CountAsync(t => !t.Deleted); + var tenantCount = await platformDbContext.Tenants.CountAsync(t => !t.IsDeleted); var oauthClientCount = await CountOAuthClientsAsync(); var todayAccessCount = await context.AccessLogs .CountAsync(l => l.CreatedAt >= today && l.CreatedAt < tomorrow); diff --git a/Controllers/TenantsController.cs b/Controllers/TenantsController.cs index 27285b3..d4b76c6 100644 --- a/Controllers/TenantsController.cs +++ b/Controllers/TenantsController.cs @@ -85,7 +85,7 @@ public class TenantsController( } [HttpGet("{id}")] - public async Task> GetTenant(TenantId id) + public async Task> GetTenant(long id) { var tenant = await platformDbContext.Tenants.FindAsync(id); if (tenant == null) @@ -111,7 +111,7 @@ public class TenantsController( } [HttpGet("{tenantId}/users")] - public async Task>> GetTenantUsers(TenantId tenantId) + public async Task>> GetTenantUsers(long tenantId) { var tenant = await platformDbContext.Tenants .FirstOrDefaultAsync(t => t.Id == tenantId); @@ -142,7 +142,7 @@ public class TenantsController( } [HttpGet("{tenantId}/roles")] - public async Task>> GetTenantRoles(TenantId tenantId) + public async Task>> GetTenantRoles(long tenantId) { var tenant = await platformDbContext.Tenants .FirstOrDefaultAsync(t => t.Id == tenantId); @@ -166,7 +166,7 @@ public class TenantsController( } [HttpGet("{tenantId}/settings")] - public async Task> GetTenantSettings(TenantId tenantId) + public async Task> GetTenantSettings(long tenantId) { var tenant = await platformDbContext.Tenants .FirstOrDefaultAsync(t => t.Id == tenantId); @@ -189,7 +189,7 @@ public class TenantsController( } [HttpPut("{tenantId}/settings")] - public async Task UpdateTenantSettings(TenantId tenantId, TenantSettings settings) + public async Task UpdateTenantSettings(long tenantId, TenantSettings settings) { var tenant = await platformDbContext.Tenants.FirstOrDefaultAsync(t => t.Id == tenantId); if (tenant == null) @@ -206,8 +206,19 @@ public class TenantsController( [HttpPost] public async Task> CreateTenant(CreateTenantDto dto) { - var tenant = new Tenant(dto.TenantCode, dto.TenantName, dto.ContactName, dto.ContactEmail, dto.ContactPhone, - dto.MaxUsers, dto.Description, dto.ExpiresAt); + var tenant = new Tenant + { + TenantCode = dto.TenantCode, + Name = dto.TenantName, + ContactName = dto.ContactName, + ContactEmail = dto.ContactEmail, + ContactPhone = dto.ContactPhone, + MaxUsers = dto.MaxUsers, + Description = dto.Description, + ExpiresAt = dto.ExpiresAt, + Status = TenantStatus.Active, + CreatedAt = DateTime.UtcNow, + }; platformDbContext.Tenants.Add(tenant); await context.SaveChangesAsync(); @@ -228,7 +239,11 @@ public class TenantsController( } var oldValue = JsonSerializer.Serialize(tenant); - tenant.UpdateInfo(dto.Name, dto.ContactName, dto.ContactEmail, dto.ContactPhone); + tenant.Name = dto.Name; + tenant.ContactName = dto.ContactName; + tenant.ContactEmail = dto.ContactEmail; + tenant.ContactPhone = dto.ContactPhone; + tenant.UpdatedAt = DateTime.UtcNow; await context.SaveChangesAsync(); @@ -257,7 +272,8 @@ public class TenantsController( user.UpdatedTime = DateTime.UtcNow; } - tenant.Delete(); + tenant.IsDeleted = true; + tenant.UpdatedAt = DateTime.UtcNow; await context.SaveChangesAsync(); await CreateAuditLog("tenant", "delete", "Tenant", tenant.Id, tenant.Name, oldValue);