From 1ee9aa843584a99c789fa639cfaca434c5c86c8f Mon Sep 17 00:00:00 2001 From: root Date: Thu, 29 Jan 2026 13:47:32 +0000 Subject: [PATCH] =?UTF-8?q?refactor:=20=E7=A7=BB=E9=99=A4=E8=8F=9C?= =?UTF-8?q?=E5=8D=95=E5=B9=B3=E5=8F=B0=E6=A0=B9=E7=A7=9F=E6=88=B7=E8=AF=BB?= =?UTF-8?q?=E5=8F=96?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Identity/Repositories/EfMenuRepository.cs | 48 ++++++++++++++----- 1 file changed, 35 insertions(+), 13 deletions(-) diff --git a/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs b/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs index 97167ef..fcacf21 100644 --- a/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs +++ b/src/Infrastructure/TakeoutSaaS.Infrastructure/Identity/Repositories/EfMenuRepository.cs @@ -10,30 +10,52 @@ namespace TakeoutSaaS.Infrastructure.Identity.Repositories; /// public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository { - private const long PlatformRootTenantId = 1000000000001; - /// - public Task> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default) + public async Task> GetByTenantAsync(long tenantId, CancellationToken cancellationToken = default) { - return dbContext.MenuDefinitions + // 1. 优先返回租户自定义菜单 + var tenantMenus = await dbContext.MenuDefinitions .AsNoTracking() - .IgnoreQueryFilters() - .Where(x => x.TenantId == PlatformRootTenantId && x.DeletedAt == null) + .Where(x => x.TenantId == tenantId) .OrderBy(x => x.ParentId) .ThenBy(x => x.SortOrder) - .ToListAsync(cancellationToken) - .ContinueWith(t => (IReadOnlyList)t.Result, cancellationToken); + .ToListAsync(cancellationToken); + if (tenantMenus.Count > 0) + { + return tenantMenus; + } + + // 2. (空行后) 回退系统默认菜单(TenantId=0) + var systemMenus = await dbContext.MenuDefinitions + .AsNoTracking() + .IgnoreQueryFilters() + .Where(x => x.TenantId == 0 && x.DeletedAt == null) + .OrderBy(x => x.ParentId) + .ThenBy(x => x.SortOrder) + .ToListAsync(cancellationToken); + + return systemMenus; } /// - public Task FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default) + public async Task FindByIdAsync(long id, long tenantId, CancellationToken cancellationToken = default) { - return dbContext.MenuDefinitions + // 1. 优先查租户菜单 + var tenantMenu = await dbContext.MenuDefinitions + .AsNoTracking() + .FirstOrDefaultAsync( + x => x.Id == id && x.TenantId == tenantId, + cancellationToken); + if (tenantMenu != null) + { + return tenantMenu; + } + + // 2. (空行后) 回退查系统默认菜单(TenantId=0) + return await dbContext.MenuDefinitions .AsNoTracking() .IgnoreQueryFilters() - .FirstOrDefaultAsync( - x => x.Id == id && x.TenantId == PlatformRootTenantId && x.DeletedAt == null, - cancellationToken); + .FirstOrDefaultAsync(x => x.Id == id && x.TenantId == 0 && x.DeletedAt == null, cancellationToken); } ///