refactor(core): enhance User and RefreshToken domain models
This commit is contained in:
@@ -5,7 +5,8 @@ public sealed class RefreshToken : Entity
|
||||
public string Token { get; init; } = string.Empty;
|
||||
public DateTimeOffset ExpiresAt { get; init; }
|
||||
public Guid UserId { get; init; }
|
||||
public User User { get; init; } = null!;
|
||||
public User? User { get; init; }
|
||||
public bool Revoked { get; set; }
|
||||
|
||||
private RefreshToken()
|
||||
{
|
||||
@@ -20,4 +21,27 @@ public sealed class RefreshToken : Entity
|
||||
ExpiresAt = expiresAt,
|
||||
};
|
||||
}
|
||||
|
||||
public static RefreshToken From(User user, string token, DateTimeOffset expiresAt)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(user);
|
||||
|
||||
return new()
|
||||
{
|
||||
User = user,
|
||||
UserId = user.Id,
|
||||
Token = token,
|
||||
ExpiresAt = expiresAt,
|
||||
};
|
||||
}
|
||||
|
||||
public void Revoke()
|
||||
{
|
||||
Revoked = true;
|
||||
}
|
||||
|
||||
public bool IsExpired(DateTimeOffset now)
|
||||
{
|
||||
return now >= ExpiresAt;
|
||||
}
|
||||
}
|
||||
@@ -2,10 +2,12 @@ namespace FiscalOS.Core.Identity;
|
||||
|
||||
public sealed class User : Entity
|
||||
{
|
||||
private readonly List<RefreshToken> _refreshTokens = [];
|
||||
|
||||
public string Username { get; init; } = string.Empty;
|
||||
public string HashedPassword { get; init; } = string.Empty;
|
||||
|
||||
public ICollection<RefreshToken> RefreshTokens { get; init; } = [];
|
||||
public IEnumerable<RefreshToken> RefreshTokens => _refreshTokens;
|
||||
|
||||
private User()
|
||||
{
|
||||
@@ -24,4 +26,11 @@ public sealed class User : Entity
|
||||
HashedPassword = hashedPassword,
|
||||
};
|
||||
}
|
||||
|
||||
public void AddRefreshToken(RefreshToken refreshToken)
|
||||
{
|
||||
ArgumentNullException.ThrowIfNull(refreshToken);
|
||||
|
||||
_refreshTokens.Add(refreshToken);
|
||||
}
|
||||
}
|
||||
@@ -29,6 +29,9 @@ namespace FiscalOS.Infra.Migrations
|
||||
b.Property<DateTimeOffset>("ExpiresAt")
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
b.Property<bool>("Revoked")
|
||||
.HasColumnType("INTEGER");
|
||||
|
||||
b.Property<string>("Token")
|
||||
.IsRequired()
|
||||
.HasColumnType("TEXT");
|
||||
|
||||
Reference in New Issue
Block a user