namespace Fengling.Member.Domain.Aggregates.Users; public class OAuthAuthorization : Entity { public long MemberId { get; private set; } public OAuthProvider Provider { get; private set; } public string OpenId { get; private set; } = string.Empty; public string? UnionId { get; private set; } public string? AccessToken { get; private set; } public string? RefreshToken { get; private set; } public DateTime? TokenExpiredAt { get; private set; } public DateTime AuthorizedAt { get; private set; } = DateTime.UtcNow; public DateTime? LastLoginAt { get; private set; } private OAuthAuthorization() { } public static OAuthAuthorization Create(long memberId, OAuthProvider provider, string openId, string? unionId = null) { return new OAuthAuthorization { MemberId = memberId, Provider = provider, OpenId = openId, UnionId = unionId, AuthorizedAt = DateTime.UtcNow }; } public void UpdateUnionId(string? unionId) { if (unionId != null && UnionId != unionId) { UnionId = unionId; } } public void RecordLogin() { LastLoginAt = DateTime.UtcNow; } public void UpdateToken(string accessToken, string? refreshToken, DateTime? expiredAt) { AccessToken = accessToken; RefreshToken = refreshToken; TokenExpiredAt = expiredAt; } }