using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Tenants.Entities; using TakeoutSaaS.Domain.Tenants.Repositories; using TakeoutSaaS.Infrastructure.App.Persistence; namespace TakeoutSaaS.Infrastructure.App.Repositories; /// /// 租户套餐仓储实现。 /// public sealed class EfTenantPackageRepository(TakeoutAppDbContext context) : ITenantPackageRepository { /// public Task FindByIdAsync(long id, CancellationToken cancellationToken = default) { return context.TenantPackages.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id, cancellationToken); } /// public async Task> SearchAsync(string? keyword, bool? isActive, CancellationToken cancellationToken = default) { var query = context.TenantPackages.AsNoTracking(); if (!string.IsNullOrWhiteSpace(keyword)) { var normalized = keyword.Trim(); query = query.Where(x => EF.Functions.ILike(x.Name, $"%{normalized}%") || EF.Functions.ILike(x.Description ?? string.Empty, $"%{normalized}%")); } if (isActive.HasValue) { query = query.Where(x => x.IsActive == isActive.Value); } return await query .OrderByDescending(x => x.CreatedAt) .ToListAsync(cancellationToken); } /// public Task AddAsync(TenantPackage package, CancellationToken cancellationToken = default) { return context.TenantPackages.AddAsync(package, cancellationToken).AsTask(); } /// public Task UpdateAsync(TenantPackage package, CancellationToken cancellationToken = default) { context.TenantPackages.Update(package); return Task.CompletedTask; } /// public async Task DeleteAsync(long id, CancellationToken cancellationToken = default) { var entity = await context.TenantPackages.FirstOrDefaultAsync(x => x.Id == id, cancellationToken); if (entity != null) { context.TenantPackages.Remove(entity); } } /// public Task SaveChangesAsync(CancellationToken cancellationToken = default) { return context.SaveChangesAsync(cancellationToken); } }