source: src-tauri/src/commands/settings.rs@ a4ca79c

main
Last change on this file since a4ca79c was a4ca79c, checked in by Georgi Paunkov <paunkovgeorgi@…>, 4 days ago

Initial commit

  • Property mode set to 100644
File size: 2.0 KB
RevLine 
[a4ca79c]1use sqlx::{PgPool, Row};
2use tauri::State;
3use std::str::FromStr;
4use crate::commands::auth::{require_manager_session, ActiveSessions};
5
6#[tauri::command]
7pub async fn get_settings(
8 pool: State<'_, PgPool>
9) -> Result<serde_json::Value, String> {
10 let row = sqlx::query(
11 r#"
12 SELECT restaurant_name, vat_rate, currency, printer_config
13 FROM app_settings
14 WHERE id = 1
15 "#
16 )
17 .fetch_one(pool.inner())
18 .await
19 .map_err(|e| e.to_string())?;
20
21 let vat_rate: rust_decimal::Decimal = row.get("vat_rate");
22
23 Ok(serde_json::json!({
24 "restaurant_name": row.get::<String, _>("restaurant_name"),
25 "vat_rate": vat_rate.to_string(),
26 "currency": row.get::<String, _>("currency"),
27 "printer_config": row.get::<String, _>("printer_config")
28 }))
29}
30
31#[tauri::command]
32pub async fn update_settings(
33 token: String,
34 restaurant_name: String,
35 vat_rate: f64,
36 currency: String,
37 printer_config: String,
38 pool: State<'_, PgPool>,
39 sessions: State<'_, ActiveSessions>,
40) -> Result<(), String> {
41 require_manager_session(&token, sessions.inner()).await? ;
42
43 if restaurant_name.trim().is_empty() {
44 return Err("Името на ресторанот не смее да биде празно".to_string());
45 }
46
47 if vat_rate < 0.0 {
48 return Err("ДДВ стапката не смее да биде негативна".to_string());
49 }
50
51 let vat_decimal = rust_decimal::Decimal::from_str(&vat_rate.to_string())
52 .map_err(|e| format!("Грешка со конверзија на ДДВ: {}", e))?;
53
54 sqlx::query(
55 r#"
56 UPDATE app_settings
57 SET restaurant_name = $1,
58 vat_rate = $2,
59 currency = $3,
60 printer_config = $4
61 WHERE id = 1
62 "#
63 )
64 .bind(restaurant_name)
65 .bind(vat_decimal)
66 .bind(currency)
67 .bind(printer_config)
68 .execute(pool.inner())
69 .await
70 .map_err(|e| e.to_string())?;
71
72 Ok(())
73}
Note: See TracBrowser for help on using the repository browser.