feat: add surreal db
This commit is contained in:
1582
src-tauri/Cargo.lock
generated
1582
src-tauri/Cargo.lock
generated
File diff suppressed because it is too large
Load Diff
@@ -39,6 +39,7 @@ tauri-plugin-upload = "2.0.0-alpha"
|
|||||||
tauri-plugin-window-state = "2.0.0-alpha"
|
tauri-plugin-window-state = "2.0.0-alpha"
|
||||||
tauri-plugin-theme = { git = "https://github.com/wyhaya/tauri-plugin-theme" }
|
tauri-plugin-theme = { git = "https://github.com/wyhaya/tauri-plugin-theme" }
|
||||||
webpage = { version = "2.0", features = ["serde"] }
|
webpage = { version = "2.0", features = ["serde"] }
|
||||||
|
surrealdb = { version = "1.1.1", features = ["kv-rocksdb"] }
|
||||||
|
|
||||||
[target.'cfg(not(target_os = "linux"))'.dependencies]
|
[target.'cfg(not(target_os = "linux"))'.dependencies]
|
||||||
keyring = "2"
|
keyring = "2"
|
||||||
|
|||||||
@@ -1,3 +1,4 @@
|
|||||||
|
pub mod db;
|
||||||
pub mod folder;
|
pub mod folder;
|
||||||
pub mod opg;
|
pub mod opg;
|
||||||
pub mod secret;
|
pub mod secret;
|
||||||
|
|||||||
23
src-tauri/src/commands/db.rs
Normal file
23
src-tauri/src/commands/db.rs
Normal file
@@ -0,0 +1,23 @@
|
|||||||
|
use crate::model::*;
|
||||||
|
use crate::AppState;
|
||||||
|
use tauri::State;
|
||||||
|
|
||||||
|
#[tauri::command(async)]
|
||||||
|
pub async fn create_account(
|
||||||
|
pubkey: String,
|
||||||
|
app_state: State<'_, AppState>,
|
||||||
|
) -> Result<Vec<Record>, ()> {
|
||||||
|
let db = app_state.db.lock().await;
|
||||||
|
|
||||||
|
let created: Vec<Record> = db
|
||||||
|
.create("account")
|
||||||
|
.content(Account {
|
||||||
|
id: None,
|
||||||
|
pubkey,
|
||||||
|
is_active: true,
|
||||||
|
})
|
||||||
|
.await
|
||||||
|
.expect("Create account failed");
|
||||||
|
|
||||||
|
Ok(created)
|
||||||
|
}
|
||||||
@@ -4,16 +4,23 @@
|
|||||||
)]
|
)]
|
||||||
|
|
||||||
pub mod commands;
|
pub mod commands;
|
||||||
|
pub mod model;
|
||||||
pub mod nostr;
|
pub mod nostr;
|
||||||
|
|
||||||
use nostr_sdk::{Client, ClientBuilder};
|
use nostr_sdk::{Client, ClientBuilder};
|
||||||
use nostr_sqlite::SQLiteDatabase;
|
use nostr_sqlite::SQLiteDatabase;
|
||||||
use std::sync::Arc;
|
use std::sync::Arc;
|
||||||
|
use surrealdb::{
|
||||||
|
engine::local::{Db, RocksDb},
|
||||||
|
Surreal,
|
||||||
|
};
|
||||||
use tauri::Manager;
|
use tauri::Manager;
|
||||||
use tauri_plugin_autostart::MacosLauncher;
|
use tauri_plugin_autostart::MacosLauncher;
|
||||||
use tauri_plugin_theme::ThemePlugin;
|
use tauri_plugin_theme::ThemePlugin;
|
||||||
|
use tokio::sync::Mutex;
|
||||||
|
|
||||||
pub struct AppState {
|
pub struct AppState {
|
||||||
|
pub db: Mutex<Surreal<Db>>,
|
||||||
pub nostr: Arc<Client>,
|
pub nostr: Arc<Client>,
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -25,6 +32,17 @@ fn main() {
|
|||||||
let config_dir = app.path().app_config_dir().unwrap();
|
let config_dir = app.path().app_config_dir().unwrap();
|
||||||
|
|
||||||
tauri::async_runtime::spawn(async move {
|
tauri::async_runtime::spawn(async move {
|
||||||
|
// Create app db connection
|
||||||
|
let db = Surreal::new::<RocksDb>(config_dir.join("lume.db"))
|
||||||
|
.await
|
||||||
|
.expect("Initialize app db failed");
|
||||||
|
|
||||||
|
// Select namespace and db
|
||||||
|
db.use_ns("lume")
|
||||||
|
.use_db("app")
|
||||||
|
.await
|
||||||
|
.expect("Open app db failed");
|
||||||
|
|
||||||
// Create database connection
|
// Create database connection
|
||||||
let nostr_db = SQLiteDatabase::open(config_dir.join("nostr.db"))
|
let nostr_db = SQLiteDatabase::open(config_dir.join("nostr.db"))
|
||||||
.await
|
.await
|
||||||
@@ -50,6 +68,7 @@ fn main() {
|
|||||||
|
|
||||||
// Init global state
|
// Init global state
|
||||||
handle.manage(AppState {
|
handle.manage(AppState {
|
||||||
|
db: Mutex::new(db),
|
||||||
nostr: client.into(),
|
nostr: client.into(),
|
||||||
})
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
28
src-tauri/src/model.rs
Normal file
28
src-tauri/src/model.rs
Normal file
@@ -0,0 +1,28 @@
|
|||||||
|
use serde::{Deserialize, Serialize};
|
||||||
|
use surrealdb::sql::Thing;
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
pub struct Account {
|
||||||
|
pub id: Option<Thing>,
|
||||||
|
pub pubkey: String,
|
||||||
|
pub is_active: bool,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize)]
|
||||||
|
pub struct Column {
|
||||||
|
pub id: Option<Thing>,
|
||||||
|
pub title: String,
|
||||||
|
pub content: String,
|
||||||
|
pub kind: i32,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Deserialize, Serialize)]
|
||||||
|
pub struct Record {
|
||||||
|
#[allow(dead_code)]
|
||||||
|
pub id: Thing,
|
||||||
|
}
|
||||||
|
|
||||||
|
#[derive(Debug, Serialize, Deserialize)]
|
||||||
|
pub struct AffectedRows {
|
||||||
|
pub rows_affected: u64,
|
||||||
|
}
|
||||||
Reference in New Issue
Block a user