game_manager_lib\commands/
ai_translation.rs1use crate::database;
9use crate::database::AppState;
10use crate::errors::AppError;
11use crate::services::gemini;
12use rusqlite::params;
13use tauri::{AppHandle, Manager, State};
14use tracing::{error, info};
15
16#[tauri::command]
18pub async fn translate_description(
19 app: AppHandle,
20 game_id: String,
21 text: String,
22) -> Result<String, AppError> {
23 info!("Comando de tradução recebido para jogo ID: {}", game_id);
24
25 let api_key = database::get_secret(&app, "gemini_api_key").map_err(|e| {
27 error!("Falha ao ler banco de secrets: {}", e);
28 AppError::DatabaseError("Erro interno de banco de dados".to_string())
29 })?;
30
31 if api_key.is_empty() {
32 error!("Chave Gemini não encontrada no banco!");
33 return Err(AppError::ValidationError(
34 "API Key do Gemini não configurada. Vá em Configurações.".to_string(),
35 ));
36 }
37
38 let translated_text = gemini::translate_text(&api_key, &text)
40 .await
41 .map_err(AppError::NetworkError)?;
42
43 let state: State<AppState> = app.state();
45 let conn = state.library_db.lock()?;
46
47 conn.execute(
48 "UPDATE game_details SET description_ptbr = ?1 WHERE game_id = ?2",
49 params![translated_text, game_id],
50 )?;
51
52 Ok(translated_text)
53}