game_manager_lib\database/
configs.rs1use crate::database::AppState;
8use crate::errors::AppError;
9use rusqlite::{params, Connection};
10use tauri::{AppHandle, Manager, State};
11
12fn ensure_config_table(conn: &Connection) -> Result<(), AppError> {
16 conn.execute(
17 "CREATE TABLE IF NOT EXISTS app_config (
18 key TEXT PRIMARY KEY,
19 value TEXT NOT NULL
20 )",
21 [],
22 )
23 .map_err(|e| AppError::DatabaseError(e.to_string()))?;
24 Ok(())
25}
26
27pub fn set_config(conn: &Connection, key: &str, value: &str) -> Result<(), AppError> {
29 ensure_config_table(conn)?;
30 conn.execute(
31 "INSERT OR REPLACE INTO app_config (key, value) VALUES (?1, ?2)",
32 params![key, value],
33 )
34 .map_err(|e| AppError::DatabaseError(e.to_string()))?;
35 Ok(())
36}
37
38pub fn get_config(conn: &Connection, key: &str) -> Result<Option<String>, AppError> {
40 ensure_config_table(conn)?;
41 let res: Result<String, rusqlite::Error> = conn.query_row(
42 "SELECT value FROM app_config WHERE key = ?1",
43 params![key],
44 |row| row.get(0),
45 );
46
47 match res {
48 Ok(val) => Ok(Some(val)),
49 Err(rusqlite::Error::QueryReturnedNoRows) => Ok(None),
50 Err(e) => Err(AppError::DatabaseError(e.to_string())),
51 }
52}
53
54pub fn store_app_version(app: &AppHandle, version: &str) -> Result<(), AppError> {
58 let state: State<AppState> = app.state();
59 let conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
60
61 ensure_config_table(&conn)?;
62
63 conn.execute(
64 "INSERT OR REPLACE INTO app_config (key, value) VALUES ('app_version', ?1)",
65 params![version],
66 )?;
67
68 Ok(())
69}
70
71pub fn get_stored_app_version(app: &AppHandle) -> Result<String, AppError> {
73 let state: State<AppState> = app.state();
74 let conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
75
76 ensure_config_table(&conn)?;
77
78 match conn.query_row(
79 "SELECT value FROM app_config WHERE key = 'app_version'",
80 [],
81 |row| row.get::<_, String>(0),
82 ) {
83 Ok(version) => Ok(version),
84 Err(rusqlite::Error::QueryReturnedNoRows) => Ok("0.0.0".to_string()),
85 Err(e) => Err(AppError::DatabaseError(e.to_string())),
86 }
87}
88
89pub fn store_schema_version(app: &AppHandle, schema_version: u32) -> Result<(), AppError> {
93 let state: State<AppState> = app.state();
94 let conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
95
96 ensure_config_table(&conn)?;
97
98 conn.execute(
99 "INSERT OR REPLACE INTO app_config (key, value) VALUES ('schema_version', ?1)",
100 params![schema_version],
101 )?;
102
103 Ok(())
104}
105
106pub fn get_stored_schema_version(app: &AppHandle) -> Result<u32, AppError> {
108 let state: State<AppState> = app.state();
109 let conn = state.metadata_db.lock().map_err(|_| AppError::MutexError)?;
110
111 ensure_config_table(&conn)?;
112
113 match conn.query_row(
114 "SELECT value FROM app_config WHERE key = 'schema_version'",
115 [],
116 |row| row.get::<_, String>(0),
117 ) {
118 Ok(version_str) => version_str.parse::<u32>().map_err(|e| {
119 AppError::DatabaseError(format!("Erro ao converter schema_version: {}", e))
120 }),
121 Err(rusqlite::Error::QueryReturnedNoRows) => Ok(0),
122 Err(e) => Err(AppError::DatabaseError(e.to_string())),
123 }
124}