48 lines
1.7 KiB
C#
48 lines
1.7 KiB
C#
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;
|
|
|
|
/// <summary>
|
|
/// EF Core 小程序用户仓储实现。
|
|
/// </summary>
|
|
public sealed class EfMiniUserRepository(IdentityDbContext dbContext) : IMiniUserRepository
|
|
{
|
|
public Task<MiniUser?> FindByOpenIdAsync(string openId, CancellationToken cancellationToken = default)
|
|
=> dbContext.MiniUsers.AsNoTracking().FirstOrDefaultAsync(x => x.OpenId == openId, cancellationToken);
|
|
|
|
public Task<MiniUser?> FindByIdAsync(long id, CancellationToken cancellationToken = default)
|
|
=> dbContext.MiniUsers.AsNoTracking().FirstOrDefaultAsync(x => x.Id == id, cancellationToken);
|
|
|
|
public async Task<MiniUser> 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;
|
|
}
|
|
}
|