using Fengling.Member.Domain.Aggregates.Users; namespace Fengling.Member.Infrastructure.Repositories; public interface IMemberRepository : IRepository { Task GetByPhoneNumberAsync(long tenantId, string phoneNumber, CancellationToken cancellationToken = default); Task GetByOpenIdAsync(string openId, CancellationToken cancellationToken = default); Task GetByUnionIdAsync(string unionId, CancellationToken cancellationToken = default); Task> GetByTenantIdAsync(long tenantId, int page = 1, int pageSize = 20, CancellationToken cancellationToken = default); Task ExistsByPhoneNumberAsync(long tenantId, string phoneNumber, CancellationToken cancellationToken = default); Task ExistsByOpenIdAsync(string openId, CancellationToken cancellationToken = default); } public class MemberRepository(ApplicationDbContext context) : RepositoryBase(context), IMemberRepository { public async Task GetByPhoneNumberAsync(long tenantId, string phoneNumber, CancellationToken cancellationToken = default) { return await DbContext.Members.FirstOrDefaultAsync(m => m.TenantId == tenantId && m.PhoneNumber == phoneNumber, cancellationToken); } public async Task GetByOpenIdAsync(string openId, CancellationToken cancellationToken = default) { return await DbContext.Members.FirstOrDefaultAsync(m => m.OpenId == openId, cancellationToken); } public async Task GetByUnionIdAsync(string unionId, CancellationToken cancellationToken = default) { return await DbContext.Members.FirstOrDefaultAsync(m => m.UnionId == unionId, cancellationToken); } public async Task> GetByTenantIdAsync( long tenantId, int page = 1, int pageSize = 20, CancellationToken cancellationToken = default) { return await DbContext.Members .Where(m => m.TenantId == tenantId) .OrderByDescending(m => m.CreatedAt) .Skip((page - 1) * pageSize) .Take(pageSize) .ToListAsync(cancellationToken); } public async Task ExistsByPhoneNumberAsync(long tenantId, string phoneNumber, CancellationToken cancellationToken = default) { return await DbContext.Members.AnyAsync(m => m.TenantId == tenantId && m.PhoneNumber == phoneNumber, cancellationToken); } public async Task ExistsByOpenIdAsync(string openId, CancellationToken cancellationToken = default) { return await DbContext.Members.AnyAsync(m => m.OpenId == openId, cancellationToken); } }