rust_forum/src/database.rs

47 lines
1.2 KiB
Rust
Raw Normal View History

2024-11-30 19:36:20 +03:00
pub mod interaction;
pub mod post;
pub mod user;
2024-12-01 22:17:38 +03:00
pub type SurrealUserReturn = Result<Option<User>, surrealdb::Error>;
pub type SurrealCountReturn = Result<Option<u128>, surrealdb::Error>;
2024-11-26 22:30:25 +03:00
use std::{sync::LazyLock, time::Duration};
use surrealdb::{
engine::remote::ws::{Client, Ws},
opt::auth::Root,
Surreal,
};
use tokio::time::sleep;
2024-12-01 22:17:38 +03:00
use crate::{feature::user::User, DatabaseConfig};
2024-11-26 22:30:25 +03:00
static DB: LazyLock<Surreal<Client>> = LazyLock::new(Surreal::init);
pub async fn establish_connection() {
let database_config = DatabaseConfig::default();
2024-11-29 20:31:02 +03:00
2024-11-26 22:30:25 +03:00
DB.connect::<Ws>(database_config.address).await.unwrap();
DB.signin(Root {
username: &database_config.username,
password: &database_config.password,
})
.await
.unwrap();
DB.use_ns(database_config.namespace).await.unwrap();
DB.use_db(database_config.database).await.unwrap();
2024-12-01 22:17:38 +03:00
DB.query("DEFINE INDEX email ON TABLE user FIELDS email UNIQUE;").await.unwrap();
2024-11-26 22:30:25 +03:00
}
pub async fn is_alive() -> bool {
tokio::select! {
alive_status = DB.health() => {
match alive_status {
Ok(_) => true,
Err(_) => false,
}
},
_ = sleep(Duration::from_secs(1)) => false
}
}