use crate::error::{AppError, AppResult};
use deadpool_redis::redis::AsyncCommands;
pub struct TokenService;
impl TokenService {
pub async fn set_token(
redis_conn: &mut deadpool_redis::Connection,
key: &str,
value: &str,
expire_seconds: u64,
) -> AppResult<()> {
let _: () = redis_conn
.set_ex(key, value, expire_seconds)
.await
.map_err(AppError::from)?;
Ok(())
}
pub async fn get_token(
redis_conn: &mut deadpool_redis::Connection,
key: &str,
) -> AppResult<Option<String>> {
let value: Option<String> = redis_conn.get(key).await.map_err(AppError::from)?;
Ok(value)
}
pub async fn delete_token(
redis_conn: &mut deadpool_redis::Connection,
key: &str,
) -> AppResult<()> {
let _: () = redis_conn.del(key).await.map_err(AppError::from)?;
Ok(())
}
pub async fn exists_token(
redis_conn: &mut deadpool_redis::Connection,
key: &str,
) -> AppResult<bool> {
let exists: bool = redis_conn.exists(key).await.map_err(AppError::from)?;
Ok(exists)
}
pub async fn get_token_ttl(
redis_conn: &mut deadpool_redis::Connection,
key: &str,
) -> AppResult<Option<u64>> {
let ttl: i64 = redis_conn.ttl(key).await.map_err(AppError::from)?;
if ttl < 0 {
Ok(None)
} else {
Ok(Some(ttl as u64))
}
}
}