using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Dictionary.Entities; using TakeoutSaaS.Domain.Dictionary.Enums; using TakeoutSaaS.Domain.Dictionary.Repositories; using TakeoutSaaS.Infrastructure.Dictionary.Persistence; namespace TakeoutSaaS.Infrastructure.Dictionary.Repositories; /// /// 字典标签覆盖仓储实现。 /// public sealed class DictionaryLabelOverrideRepository(DictionaryDbContext context) : IDictionaryLabelOverrideRepository { /// /// 根据 ID 获取覆盖配置。 /// public Task GetByIdAsync(long id, CancellationToken cancellationToken = default) { return context.DictionaryLabelOverrides .Include(x => x.DictionaryItem) .FirstOrDefaultAsync(x => x.Id == id && x.DeletedAt == null, cancellationToken); } /// /// 获取指定字典项的覆盖配置。 /// public Task GetByItemIdAsync(long tenantId, long dictionaryItemId, CancellationToken cancellationToken = default) { return context.DictionaryLabelOverrides .FirstOrDefaultAsync(x => x.TenantId == tenantId && x.DictionaryItemId == dictionaryItemId && x.DeletedAt == null, cancellationToken); } /// /// 获取租户的所有覆盖配置。 /// public async Task> ListByTenantAsync( long tenantId, OverrideType? overrideType = null, CancellationToken cancellationToken = default) { var query = context.DictionaryLabelOverrides .AsNoTracking() .Include(x => x.DictionaryItem) .Where(x => x.TenantId == tenantId && x.DeletedAt == null); if (overrideType.HasValue) { query = query.Where(x => x.OverrideType == overrideType.Value); } return await query.OrderByDescending(x => x.CreatedAt).ToListAsync(cancellationToken); } /// /// 批量获取多个字典项的覆盖配置。 /// public async Task> GetByItemIdsAsync( long tenantId, IEnumerable dictionaryItemIds, CancellationToken cancellationToken = default) { var ids = dictionaryItemIds.ToArray(); if (ids.Length == 0) return Array.Empty(); return await context.DictionaryLabelOverrides .AsNoTracking() .Where(x => x.TenantId == tenantId && ids.Contains(x.DictionaryItemId) && x.DeletedAt == null) .ToListAsync(cancellationToken); } /// /// 新增覆盖配置。 /// public Task AddAsync(DictionaryLabelOverride entity, CancellationToken cancellationToken = default) { context.DictionaryLabelOverrides.Add(entity); return Task.CompletedTask; } /// /// 更新覆盖配置。 /// public Task UpdateAsync(DictionaryLabelOverride entity, CancellationToken cancellationToken = default) { context.DictionaryLabelOverrides.Update(entity); return Task.CompletedTask; } /// /// 删除覆盖配置。 /// public Task DeleteAsync(DictionaryLabelOverride entity, CancellationToken cancellationToken = default) { entity.DeletedAt = DateTime.UtcNow; context.DictionaryLabelOverrides.Update(entity); return Task.CompletedTask; } /// /// 持久化更改。 /// public Task SaveChangesAsync(CancellationToken cancellationToken = default) => context.SaveChangesAsync(cancellationToken); }