using System.Linq; using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Merchants.Entities; using TakeoutSaaS.Domain.Merchants.Enums; using TakeoutSaaS.Domain.Merchants.Repositories; using TakeoutSaaS.Infrastructure.App.Persistence; namespace TakeoutSaaS.Infrastructure.App.Repositories; /// /// 商户聚合的 EF Core 仓储实现。 /// public sealed class EfMerchantRepository : IMerchantRepository { private readonly TakeoutAppDbContext _context; /// /// 初始化仓储。 /// public EfMerchantRepository(TakeoutAppDbContext context) { _context = context; } /// public Task FindByIdAsync(long merchantId, long tenantId, CancellationToken cancellationToken = default) { return _context.Merchants .AsNoTracking() .Where(x => x.TenantId == tenantId && x.Id == merchantId) .FirstOrDefaultAsync(cancellationToken); } /// public async Task> SearchAsync(long tenantId, MerchantStatus? status, CancellationToken cancellationToken = default) { var query = _context.Merchants .AsNoTracking() .Where(x => x.TenantId == tenantId); if (status.HasValue) { query = query.Where(x => x.Status == status.Value); } return await query .OrderByDescending(x => x.CreatedAt) .ToListAsync(cancellationToken); } /// public async Task> GetStaffAsync(long merchantId, long tenantId, CancellationToken cancellationToken = default) { var staffs = await _context.MerchantStaff .AsNoTracking() .Where(x => x.TenantId == tenantId && x.MerchantId == merchantId) .OrderBy(x => x.Name) .ToListAsync(cancellationToken); return staffs; } /// public async Task> GetContractsAsync(long merchantId, long tenantId, CancellationToken cancellationToken = default) { var contracts = await _context.MerchantContracts .AsNoTracking() .Where(x => x.TenantId == tenantId && x.MerchantId == merchantId) .OrderByDescending(x => x.CreatedAt) .ToListAsync(cancellationToken); return contracts; } /// public async Task> GetDocumentsAsync(long merchantId, long tenantId, CancellationToken cancellationToken = default) { var documents = await _context.MerchantDocuments .AsNoTracking() .Where(x => x.TenantId == tenantId && x.MerchantId == merchantId) .OrderBy(x => x.CreatedAt) .ToListAsync(cancellationToken); return documents; } /// public Task AddMerchantAsync(Merchant merchant, CancellationToken cancellationToken = default) { return _context.Merchants.AddAsync(merchant, cancellationToken).AsTask(); } /// public Task AddStaffAsync(MerchantStaff staff, CancellationToken cancellationToken = default) { return _context.MerchantStaff.AddAsync(staff, cancellationToken).AsTask(); } /// public Task AddContractAsync(MerchantContract contract, CancellationToken cancellationToken = default) { return _context.MerchantContracts.AddAsync(contract, cancellationToken).AsTask(); } /// public Task AddDocumentAsync(MerchantDocument document, CancellationToken cancellationToken = default) { return _context.MerchantDocuments.AddAsync(document, cancellationToken).AsTask(); } /// public Task SaveChangesAsync(CancellationToken cancellationToken = default) { return _context.SaveChangesAsync(cancellationToken); } }