source: src-tauri/src/commands/table.rs

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

Initial commit

  • Property mode set to 100644
File size: 2.5 KB
Line 
1use sqlx::PgPool;
2use tauri::State;
3use crate::models::table::RestaurantTable;
4use crate::commands::auth::ActiveSessions;
5
6pub const STATUS_FREE: &str = "СЛОБОДНА";
7pub const STATUS_OCCUPIED: &str = "ЗАФАТЕНА";
8pub const STATUS_RESERVED: &str = "РЕЗЕРВИРАНА";
9
10#[tauri::command]
11pub async fn get_tables(
12 token: String,
13 pool: State<'_, PgPool>,
14 sessions: State<'_, ActiveSessions>,
15) -> Result<Vec<RestaurantTable>, String> {
16 {
17 let lock = sessions.0.lock().map_err(|_| "Системска грешка со сесијата".to_string())?;
18 if !lock.contains_key(&token) {
19 return Err("Невалидна или истечена сесија.".to_string());
20 }
21 }
22
23 let tables = sqlx::query_as::<_, RestaurantTable>(
24 "
25 SELECT table_id, table_number, capacity, status
26 FROM restaurant_table
27 ORDER BY table_id ASC
28 "
29 )
30 .fetch_all(pool.inner())
31 .await
32 .map_err(|e| e.to_string())?;
33
34 Ok(tables)
35}
36
37#[tauri::command]
38pub async fn reserve_table(
39 token: String,
40 table_id: i32,
41 pool: State<'_, PgPool>,
42 sessions: State<'_, ActiveSessions>,
43) -> Result<(), String> {
44 {
45 let lock = sessions.0.lock().map_err(|_| "Системска грешка со сесијата".to_string())?;
46 if !lock.contains_key(&token) {
47 return Err("Невалидна или истечена сесија.".to_string());
48 }
49 }
50
51 set_table_status(table_id, STATUS_RESERVED, pool.inner()).await
52}
53
54#[tauri::command]
55pub async fn cancel_reservation(
56 token: String,
57 table_id: i32,
58 pool: State<'_, PgPool>,
59 sessions: State<'_, ActiveSessions>,
60) -> Result<(), String> {
61 {
62 let lock = sessions.0.lock().map_err(|_| "Системска грешка со сесијата".to_string())?;
63 if !lock.contains_key(&token) {
64 return Err("Невалидна или истечена сесија.".to_string());
65 }
66 }
67
68 set_table_status(table_id, STATUS_FREE, pool.inner()).await
69}
70
71pub async fn set_table_status<'e, E>(
72 table_id: i32,
73 status: &str,
74 executor: E,
75) -> Result<(), String>
76where
77 E: sqlx::Executor<'e, Database = sqlx::Postgres>,
78{
79 sqlx::query(
80 "
81 UPDATE restaurant_table
82 SET status = $1
83 WHERE table_id = $2
84 "
85 )
86 .bind(status)
87 .bind(table_id)
88 .execute(executor)
89 .await
90 .map_err(|e| e.to_string())?;
91
92 Ok(())
93}
Note: See TracBrowser for help on using the repository browser.