- Convert MemberId from long to Guid strongly typed ID - Update all Member commands to use record pattern with MemberId - Update all Member endpoints to use record pattern with MemberId - Update entity configurations to use GuidVersion7ValueGenerator - Add implicit conversion operators for MemberId Migration: ChangeMemberIdToGuid
70 lines
3.2 KiB
C#
70 lines
3.2 KiB
C#
using Fengling.Member.Domain.Aggregates.Users;
|
|
|
|
namespace Fengling.Member.Infrastructure.Repositories;
|
|
|
|
public interface IMemberRepository : IRepository<Fengling.Member.Domain.Aggregates.Users.MemberEntity, MemberId>
|
|
{
|
|
Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByPhoneNumberAsync(long tenantId, string phoneNumber,
|
|
CancellationToken cancellationToken = default);
|
|
|
|
Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByOpenIdAsync(string openId,
|
|
CancellationToken cancellationToken = default);
|
|
|
|
Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByUnionIdAsync(string unionId,
|
|
CancellationToken cancellationToken = default);
|
|
|
|
Task<IEnumerable<Fengling.Member.Domain.Aggregates.Users.MemberEntity>> GetByTenantIdAsync(long tenantId,
|
|
int page = 1, int pageSize = 20, CancellationToken cancellationToken = default);
|
|
|
|
Task<bool> ExistsByPhoneNumberAsync(long tenantId, string phoneNumber,
|
|
CancellationToken cancellationToken = default);
|
|
|
|
Task<bool> ExistsByOpenIdAsync(string openId, CancellationToken cancellationToken = default);
|
|
}
|
|
|
|
public class MemberRepository(ApplicationDbContext context)
|
|
: RepositoryBase<Fengling.Member.Domain.Aggregates.Users.MemberEntity, MemberId, ApplicationDbContext>(context),
|
|
IMemberRepository
|
|
{
|
|
public async Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByPhoneNumberAsync(long tenantId,
|
|
string phoneNumber, CancellationToken cancellationToken = default)
|
|
{
|
|
return await DbContext.Members.FirstOrDefaultAsync(m => m.TenantId == tenantId && m.PhoneNumber == phoneNumber,
|
|
cancellationToken);
|
|
}
|
|
|
|
public async Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByOpenIdAsync(string openId,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
return await DbContext.Members.FirstOrDefaultAsync(m => m.OpenId == openId, cancellationToken);
|
|
}
|
|
|
|
public async Task<Fengling.Member.Domain.Aggregates.Users.MemberEntity?> GetByUnionIdAsync(string unionId,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
return await DbContext.Members.FirstOrDefaultAsync(m => m.UnionId == unionId, cancellationToken);
|
|
}
|
|
|
|
public async Task<IEnumerable<Fengling.Member.Domain.Aggregates.Users.MemberEntity>> 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<bool> ExistsByPhoneNumberAsync(long tenantId, string phoneNumber,
|
|
CancellationToken cancellationToken = default)
|
|
{
|
|
return await DbContext.Members.AnyAsync(m => m.TenantId == tenantId && m.PhoneNumber == phoneNumber,
|
|
cancellationToken);
|
|
}
|
|
|
|
public async Task<bool> ExistsByOpenIdAsync(string openId, CancellationToken cancellationToken = default)
|
|
{
|
|
return await DbContext.Members.AnyAsync(m => m.OpenId == openId, cancellationToken);
|
|
}
|
|
} |