use crate::{Error, Session, UserId, session::SessionToken};
use async_trait::async_trait;
#[async_trait]
pub trait SessionRepository: Send + Sync + 'static {
async fn create(&self, session: Session) -> Result<Session, Error>;
async fn find_by_token(&self, token: &SessionToken) -> Result<Option<Session>, Error>;
async fn delete(&self, token: &SessionToken) -> Result<(), Error>;
async fn delete_by_user_id(&self, user_id: &UserId) -> Result<(), Error>;
async fn cleanup_expired(&self) -> Result<(), Error>;
}