namespace GermanApp.Domain.Entities;
///
/// Represents a refresh token for JWT authentication.
///
public class RefreshToken
{
public int Id { get; internal set; }
public int UserId { get; internal set; }
public string Token { get; internal set; } = string.Empty;
public DateTime ExpiresAt { get; internal set; }
public bool IsActive { get; internal set; } = true;
public DateTime CreatedAt { get; internal set; }
public DateTime? RevokedAt { get; internal set; }
///
/// Constructor for EF Core deserialization.
///
private RefreshToken() { }
///
/// Factory method to create a new refresh token.
///
public static RefreshToken Create(int userId, string token, int expireDays = 7)
{
return new RefreshToken
{
UserId = userId,
Token = token,
ExpiresAt = DateTime.UtcNow.AddDays(expireDays),
CreatedAt = DateTime.UtcNow
};
}
///
/// Revokes the refresh token.
///
public void Revoke()
{
IsActive = false;
RevokedAt = DateTime.UtcNow;
}
///
/// Checks if the token is expired.
///
public bool IsExpired() => DateTime.UtcNow >= ExpiresAt;
///
/// Checks if the token is valid (not revoked and not expired).
///
public bool IsValid() => IsActive && !IsExpired();
}