using System; using System.Threading; using System.Threading.Tasks; using Microsoft.EntityFrameworkCore; using TakeoutSaaS.Domain.Identity.Entities; using TakeoutSaaS.Domain.Identity.Repositories; namespace TakeoutSaaS.Infrastructure.Identity.Persistence; /// /// EF Core 小程序用户仓储实现。 /// public sealed class EfMiniUserRepository(IdentityDbContext dbContext) : IMiniUserRepository { public Task FindByOpenIdAsync(string openId, CancellationToken cancellationToken = default) => dbContext.MiniUsers.AsNoTracking().FirstOrDefaultAsync(x => x.OpenId == openId, cancellationToken); public Task FindByIdAsync(long id, CancellationToken cancellationToken = default) => dbContext.MiniUsers.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id, cancellationToken); public async Task CreateOrUpdateAsync(string openId, string? unionId, string? nickname, string? avatar, long tenantId, CancellationToken cancellationToken = default) { var user = await dbContext.MiniUsers.FirstOrDefaultAsync(x => x.OpenId == openId, cancellationToken); if (user == null) { user = new MiniUser { Id = 0, OpenId = openId, UnionId = unionId, Nickname = nickname ?? "小程序用户", Avatar = avatar, TenantId = tenantId }; dbContext.MiniUsers.Add(user); } else { user.UnionId = unionId ?? user.UnionId; user.Nickname = nickname ?? user.Nickname; user.Avatar = avatar ?? user.Avatar; } await dbContext.SaveChangesAsync(cancellationToken); return user; } }