use crate::db::Database;
impl Database {
pub async fn create_token(&self, token: &str, username: &str) -> Result<(), String> {
let now = chrono::Utc::now().to_rfc3339();
self.conn()
.await?
.execute(
"INSERT INTO tokens (token, username, created_at) VALUES (?1, ?2, ?3)",
turso::params![token, username, now],
)
.await
.map_err(|e| e.to_string())?;
Ok(())
}
pub async fn get_username_by_token(&self, token: &str) -> Result<Option<String>, String> {
let mut rows = self
.conn().await?
.query(
"SELECT username FROM tokens WHERE token = ?1 AND created_at > datetime('now', '-365 days')",
turso::params![token],
)
.await
.map_err(|e| e.to_string())?;
if let Some(row) = rows.next().await.map_err(|e| e.to_string())? {
Ok(Some(row.get(0).map_err(|e| e.to_string())?))
} else {
Ok(None)
}
}
pub async fn delete_token(&self, token: &str) -> Result<(), String> {
self.conn()
.await?
.execute("DELETE FROM tokens WHERE token = ?1", turso::params![token])
.await
.map_err(|e| e.to_string())?;
Ok(())
}
pub async fn cleanup_expired_tokens(&self) -> Result<(), String> {
self.conn()
.await?
.execute(
"DELETE FROM tokens WHERE created_at < datetime('now', '-365 days')",
(),
)
.await
.map_err(|e| e.to_string())?;
Ok(())
}
}