using Modules.User.Application.Models.Access;

namespace Modules.User.Application.Gateways;

public interface IUserRepository
{
    Task<Domain.Entities.User.User?> GetByIdAsync(Guid id, CancellationToken cancellationToken = default);
    Task<bool> ExistsByEmailAsync(string email, CancellationToken cancellationToken);
    Task<Domain.Entities.User.User?> GetByAccountIdAsync(Guid accountId, CancellationToken cancellationToken = default);
    Task AddAsync(Domain.Entities.User.User user, CancellationToken cancellationToken = default);
    Task SaveAsync(Domain.Entities.User.User user, CancellationToken cancellationToken = default);
    Task<HashedAccount?> TryGetHashedAccountAsync(string email, CancellationToken cancellationToken = default);
}