//! 更新 API Token last_used_at Worker use async_trait::async_trait; use sqlx::PgPool; use serde::{Serialize, Deserialize}; use crate::error::SaasResult; use super::Worker; #[derive(Debug, Serialize, Deserialize)] pub struct UpdateLastUsedArgs { /// token_hash 用于 WHERE 条件匹配 pub token_hash: String, } pub struct UpdateLastUsedWorker; #[async_trait] impl Worker for UpdateLastUsedWorker { type Args = UpdateLastUsedArgs; fn name(&self) -> &str { "update_last_used" } async fn perform(&self, db: &PgPool, args: Self::Args) -> SaasResult<()> { let now = chrono::Utc::now(); sqlx::query("UPDATE api_tokens SET last_used_at = $1 WHERE token_hash = $2") .bind(&now) .bind(&args.token_hash) .execute(db) .await?; Ok(()) } }