//! IP 与用户代理信息定期清理后台任务。 //! //! 仅在 `server` feature 启用时编译,每天运行一次。 use std::time::Duration; use tokio::time::interval; use crate::db::pool::get_conn; /// 启动 IP 信息清理循环,每天将 90 天前的评论的 `ip_address` 与 `user_agent` 置空。 pub async fn run_purge() { // 每天触发一次 let mut ticker = interval(Duration::from_secs(86400)); loop { match get_conn().await { Ok(client) => { // 仅清理 90 天前且仍保留 IP 的评论 if let Err(e) = client .execute("UPDATE comments SET ip_address = NULL, user_agent = NULL WHERE created_at < NOW() - INTERVAL '90 days' AND ip_address IS NOT NULL", &[]) .await { tracing::error!("IP purge error: {:?}", e); } } Err(e) => { tracing::error!("Failed to get DB connection for IP purge: {:?}", e); } } ticker.tick().await; } }