use crate::models::{AuthTokenResponse, User}; use crate::state::{AppState, BASE_URL}; #[tauri::command] pub async fn login(state: tauri::State<'_, AppState>, email: String) -> Result { let users: Vec = state .client .get(format!("{}/users", BASE_URL)) .send() .await .map_err(|e| e.to_string())? .json() .await .map_err(|e| e.to_string())?; let user = users .into_iter() .find(|u| u.email == email) .ok_or_else(|| "User not found".to_string())?; let body = serde_json::json!({ "user_id": user.id, "kind": "refresh_token", "expires_at": "2027-01-01T00:00:00Z" }); let token_resp: AuthTokenResponse = state .client .post(format!("{}/auth-tokens", BASE_URL)) .json(&body) .send() .await .map_err(|e| e.to_string())? .json() .await .map_err(|e| e.to_string())?; *state.token.lock().unwrap() = Some(token_resp.token); *state.user_id.lock().unwrap() = Some(user.id.clone()); Ok(user) }