Skip to content

Commit 844f7fa

Browse files
committed
feat: add/remove projects
1 parent 1694e11 commit 844f7fa

File tree

6 files changed

+75
-63
lines changed

6 files changed

+75
-63
lines changed

src-tauri/.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,3 +2,4 @@
22
# will have compiled files and executables
33
/target/
44

5+
/project_db/

src-tauri/project_db/conf

Lines changed: 0 additions & 4 deletions
This file was deleted.

src-tauri/project_db/db

-512 KB
Binary file not shown.
-91 Bytes
Binary file not shown.

src-tauri/src/main.rs

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ mod project_db;
66
mod utils;
77

88
use postgres::{get_schema_tables, get_sql_result, pg_connector};
9-
use project_db::{get_project_details, get_projects, ProjectDB};
9+
use project_db::{get_project_details, get_projects, remove_project, ProjectDB};
1010
use std::sync::Arc;
1111
#[cfg(debug_assertions)]
1212
use tauri::Manager;
@@ -48,7 +48,8 @@ fn main() {
4848
get_project_details,
4949
get_schema_tables,
5050
pg_connector,
51-
get_sql_result
51+
get_sql_result,
52+
remove_project,
5253
])
5354
.run(tauri::generate_context!())
5455
.expect("error while running tauri application");

src-tauri/src/project_db.rs

Lines changed: 71 additions & 57 deletions
Original file line numberDiff line numberDiff line change
@@ -5,86 +5,100 @@ use crate::AppState;
55

66
#[tauri::command]
77
pub async fn get_projects(app_state: State<'_, AppState>) -> Result<Vec<String>> {
8-
let project_db = app_state.project_db.lock().await;
9-
let project_db = project_db.as_ref().unwrap();
10-
11-
let db = sled::open(&project_db.db_path).unwrap();
12-
let projects = db
13-
.iter()
14-
.map(|r| {
15-
let (project, _) = r.unwrap();
16-
String::from_utf8(project.to_vec()).unwrap()
17-
})
18-
.collect();
19-
20-
Ok(projects)
8+
let project_db = app_state.project_db.lock().await;
9+
let project_db = project_db.as_ref().unwrap();
10+
11+
let db = sled::open(&project_db.db_path).unwrap();
12+
let projects = db
13+
.iter()
14+
.map(|r| {
15+
let (project, _) = r.unwrap();
16+
String::from_utf8(project.to_vec()).unwrap()
17+
})
18+
.collect();
19+
20+
Ok(projects)
2121
}
2222

2323
#[tauri::command]
2424
pub async fn get_project_details(
25-
project: String,
26-
app_state: State<'_, AppState>,
25+
project: String,
26+
app_state: State<'_, AppState>,
2727
) -> Result<ProjectDetails> {
28-
let project_db = app_state.project_db.lock().await;
29-
let project_db = project_db.as_ref().unwrap();
28+
let project_db = app_state.project_db.lock().await;
29+
let project_db = project_db.as_ref().unwrap();
3030

31-
let project_details = project_db.get_connection_string(project.as_str())?;
31+
let project_details = project_db.get_connection_string(project.as_str())?;
3232

33-
Ok(project_details)
33+
Ok(project_details)
34+
}
35+
36+
#[tauri::command]
37+
pub async fn remove_project(project: String, app_state: State<'_, AppState>) -> Result<()> {
38+
let project_db = app_state.project_db.lock().await;
39+
let project_db = project_db.as_ref().unwrap();
40+
project_db.remove_project(project.as_str())?;
41+
Ok(())
3442
}
3543

3644
#[derive(Serialize, Deserialize, Debug, Clone, Default)]
3745
pub struct ProjectDetails {
38-
pub user: String,
39-
pub password: String,
40-
pub host: String,
41-
pub port: String,
46+
pub user: String,
47+
pub password: String,
48+
pub host: String,
49+
pub port: String,
4250
}
4351

4452
#[derive(Serialize, Deserialize, Debug, Clone)]
4553
pub struct ProjectDB {
46-
pub db_path: String,
54+
pub db_path: String,
4755
}
4856

4957
impl Default for ProjectDB {
50-
fn default() -> Self {
51-
Self::new()
52-
}
58+
fn default() -> Self {
59+
Self::new()
60+
}
5361
}
5462

5563
impl ProjectDB {
56-
pub fn new() -> Self {
57-
Self {
58-
db_path: String::from("project_db"),
64+
pub fn new() -> Self {
65+
Self {
66+
db_path: String::from("project_db"),
67+
}
68+
}
69+
70+
pub fn get_connection_string(&self, project: &str) -> Result<ProjectDetails> {
71+
let db = sled::open(&self.db_path).unwrap();
72+
let connection_string = db.get(project).unwrap();
73+
let mut project_details = ProjectDetails::default();
74+
75+
if let Some(connection_string) = connection_string {
76+
let connection_string = connection_string.to_vec();
77+
let connection_string = String::from_utf8(connection_string).unwrap();
78+
let connection_string = connection_string.split(' ').collect::<Vec<&str>>();
79+
80+
for connection_string in connection_string {
81+
let connection_string = connection_string.split('=').collect::<Vec<&str>>();
82+
let key = connection_string[0];
83+
let value = connection_string[1];
84+
85+
match key {
86+
"user" => project_details.user = value.to_string(),
87+
"password" => project_details.password = value.to_string(),
88+
"host" => project_details.host = value.to_string(),
89+
"port" => project_details.port = value.to_string(),
90+
_ => (),
5991
}
92+
}
6093
}
6194

62-
pub fn get_connection_string(&self, project: &str) -> Result<ProjectDetails> {
63-
let db = sled::open(&self.db_path).unwrap();
64-
let connection_string = db.get(project).unwrap();
65-
let mut project_details = ProjectDetails::default();
66-
67-
if let Some(connection_string) = connection_string {
68-
let connection_string = connection_string.to_vec();
69-
let connection_string = String::from_utf8(connection_string).unwrap();
70-
let connection_string = connection_string.split(" ").collect::<Vec<&str>>();
71-
72-
for connection_string in connection_string {
73-
let connection_string = connection_string.split("=").collect::<Vec<&str>>();
74-
let key = connection_string[0];
75-
let value = connection_string[1];
76-
77-
match key {
78-
"user" => project_details.user = value.to_string(),
79-
"password" => project_details.password = value.to_string(),
80-
"host" => project_details.host = value.to_string(),
81-
"port" => project_details.port = value.to_string(),
82-
_ => (),
83-
}
84-
}
85-
}
95+
Ok(project_details)
96+
}
8697

87-
Ok(project_details)
88-
}
89-
}
98+
pub fn remove_project(&self, project: &str) -> Result<()> {
99+
let db = sled::open(&self.db_path).unwrap();
100+
db.remove(project).unwrap();
90101

102+
Ok(())
103+
}
104+
}

0 commit comments

Comments
 (0)