using SIGCM2.Domain.Entities;
namespace SIGCM2.Application.Abstractions.Persistence;
public interface IRefreshTokenRepository
{
///
/// Finds a refresh token record by its SHA-256 hash.
/// Returns the record even if it is revoked or expired — callers decide what to do.
/// Returns null if no record matches the hash.
///
Task GetByHashAsync(string tokenHash, CancellationToken ct = default);
/// Persists a new refresh token and returns its generated Id.
Task AddAsync(RefreshToken token, CancellationToken ct = default);
/// Marks a single token as revoked and optionally records its successor.
Task RevokeAsync(int id, int? replacedById, DateTime revokedAt, CancellationToken ct = default);
///
/// Revokes all active (RevokedAt IS NULL) tokens in a family.
/// Used for chain revocation on reuse detection.
/// Returns the count of rows affected.
///
Task RevokeFamilyAsync(Guid familyId, DateTime revokedAt, CancellationToken ct = default);
///
/// Revokes all active tokens for a user across all families.
/// Used for logout.
/// Returns the count of rows affected.
///
Task RevokeAllActiveForUserAsync(int usuarioId, DateTime revokedAt, CancellationToken ct = default);
}