use serde::{Deserialize, Serialize}; use crate::modules::user_token_db::{self, UserToken, TokenIpBinding}; #[derive(Debug, Serialize, Deserialize)] pub struct CreateTokenRequest { pub username: String, pub expires_type: String, pub description: Option, pub max_ips: i32, pub curfew_start: Option, pub curfew_end: Option, pub custom_expires_at: Option, // 自定义过期时间戳 (秒) } #[derive(Debug, Serialize, Deserialize)] pub struct UpdateTokenRequest { pub username: Option, pub description: Option, pub enabled: Option, pub max_ips: Option, pub curfew_start: Option>, pub curfew_end: Option>, } // 命令实现 /// 列出所有令牌 #[tauri::command] pub async fn list_user_tokens() -> Result, String> { user_token_db::list_tokens() } /// 创建新令牌 #[tauri::command] pub async fn create_user_token(request: CreateTokenRequest) -> Result { user_token_db::create_token( request.username, request.expires_type, request.description, request.max_ips, request.curfew_start, request.curfew_end, request.custom_expires_at, ) } /// 更新令牌 #[tauri::command] pub async fn update_user_token(id: String, request: UpdateTokenRequest) -> Result<(), String> { user_token_db::update_token( &id, request.username, request.description, request.enabled, request.max_ips, request.curfew_start, request.curfew_end, ) } /// 删除令牌 #[tauri::command] pub async fn delete_user_token(id: String) -> Result<(), String> { user_token_db::delete_token(&id) } /// 续期令牌 #[tauri::command] pub async fn renew_user_token(id: String, expires_type: String) -> Result<(), String> { user_token_db::renew_token(&id, &expires_type) } /// 获取令牌 IP 绑定 #[tauri::command] pub async fn get_token_ip_bindings(token_id: String) -> Result, String> { user_token_db::get_token_ips(&token_id) } #[derive(Debug, Serialize, Deserialize)] pub struct UserTokenStats { pub total_tokens: usize, pub active_tokens: usize, pub total_users: usize, pub today_requests: i64, } /// 获取简单的统计信息 #[tauri::command] pub async fn get_user_token_summary() -> Result { let tokens = user_token_db::list_tokens()?; let active_tokens = tokens.iter().filter(|t| t.enabled).count(); // 统计唯一用户 let mut users = std::collections::HashSet::new(); for t in &tokens { users.insert(t.username.clone()); } // 这里简单返回一些数据,请求数最好从数据库聚合查询 // 目前仅作为演示,请求数暂不精确统计今日的 Ok(UserTokenStats { total_tokens: tokens.len(), active_tokens, total_users: users.len(), today_requests: 0, // TODO: Implement daily stats query }) }