using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Identity.Entities; using TakeoutSaaS.Domain.Identity.Enums; using TakeoutSaaS.Domain.Identity.Repositories; using TakeoutSaaS.Infrastructure.Identity.Persistence; namespace TakeoutSaaS.Infrastructure.Identity.Repositories; /// /// 菜单仓储 EF 实现。 /// public sealed class EfMenuRepository(IdentityDbContext dbContext) : IMenuRepository { /// public async Task> GetByPortalAsync(PortalType portal, CancellationToken cancellationToken = default) { // 1. 按门户类型查询菜单(忽略租户过滤器) var menus = await dbContext.MenuDefinitions .IgnoreQueryFilters() .AsNoTracking() .Where(x => x.Portal == portal && x.DeletedAt == null) .OrderBy(x => x.ParentId) .ThenBy(x => x.SortOrder) .ToListAsync(cancellationToken); return menus; } /// public async Task FindByIdAsync(long id, CancellationToken cancellationToken = default) { // 1. 按 ID 查询菜单(忽略租户过滤器) return await dbContext.MenuDefinitions .IgnoreQueryFilters() .AsNoTracking() .FirstOrDefaultAsync(x => x.Id == id && x.DeletedAt == null, cancellationToken); } /// public Task AddAsync(MenuDefinition menu, CancellationToken cancellationToken = default) { return dbContext.MenuDefinitions.AddAsync(menu, cancellationToken).AsTask(); } /// public Task UpdateAsync(MenuDefinition menu, CancellationToken cancellationToken = default) { dbContext.MenuDefinitions.Update(menu); return Task.CompletedTask; } /// public async Task DeleteAsync(long id, CancellationToken cancellationToken = default) { // 1. 查询目标(忽略租户过滤器) var entity = await dbContext.MenuDefinitions .IgnoreQueryFilters() .FirstOrDefaultAsync(x => x.Id == id, cancellationToken); // 2. 存在则删除 if (entity is not null) { dbContext.MenuDefinitions.Remove(entity); } } /// public Task SaveChangesAsync(CancellationToken cancellationToken = default) { return dbContext.SaveChangesAsync(cancellationToken); } }