use crate::{
Error, UserId,
storage::{SecureToken, TokenPurpose},
};
use async_trait::async_trait;
use chrono::Duration;
#[async_trait]
pub trait TokenRepository: Send + Sync + 'static {
async fn create_token(
&self,
user_id: &UserId,
purpose: TokenPurpose,
expires_in: Duration,
) -> Result<SecureToken, Error>;
async fn verify_token(
&self,
token: &str,
purpose: TokenPurpose,
) -> Result<Option<SecureToken>, Error>;
async fn check_token(&self, token: &str, purpose: TokenPurpose) -> Result<bool, Error>;
async fn cleanup_expired_tokens(&self) -> Result<(), Error>;
}