aboutsummaryrefslogtreecommitdiff
path: root/logic/src/admin/mod.rs
diff options
context:
space:
mode:
Diffstat (limited to 'logic/src/admin/mod.rs')
-rw-r--r--logic/src/admin/mod.rs40
1 files changed, 34 insertions, 6 deletions
diff --git a/logic/src/admin/mod.rs b/logic/src/admin/mod.rs
index 2545ba4..804cb2b 100644
--- a/logic/src/admin/mod.rs
+++ b/logic/src/admin/mod.rs
@@ -7,14 +7,42 @@
pub mod log;
pub mod user;
-use crate::session::AdminSession;
-use anyhow::Result;
-use jellydb::Database;
-use jellyimport::IMPORT_ERRORS;
+use crate::{DATABASE, session::AdminSession};
+use anyhow::{Result, anyhow};
+use jellyimport::{IMPORT_ERRORS, import_wrap};
+use rand::Rng;
+use std::time::{Duration, Instant};
+use tokio::task::spawn_blocking;
pub async fn get_import_errors(_session: &AdminSession) -> Vec<String> {
IMPORT_ERRORS.read().await.to_owned()
}
-pub fn list_invites(_session: &AdminSession, database: &Database) -> Result<Vec<String>> {
- database.list_invites()
+pub fn list_invites(_session: &AdminSession) -> Result<Vec<String>> {
+ DATABASE.list_invites()
+}
+
+pub fn create_invite(_session: &AdminSession) -> Result<String> {
+ let i = format!("{}", rand::rng().random::<u128>());
+ DATABASE.create_invite(&i)?;
+ Ok(i)
+}
+pub fn delete_invite(_session: &AdminSession, invite: &str) -> Result<()> {
+ if !DATABASE.delete_invite(invite)? {
+ Err(anyhow!("invite does not exist"))?;
+ };
+ Ok(())
+}
+pub async fn update_search_index(_session: &AdminSession) -> Result<()> {
+ spawn_blocking(move || DATABASE.search_create_index()).await?
+}
+pub async fn do_import(
+ _session: &AdminSession,
+ incremental: bool,
+) -> Result<(Duration, Result<()>)> {
+ let t = Instant::now();
+ if !incremental {
+ DATABASE.clear_nodes()?;
+ }
+ let r = import_wrap((*DATABASE).clone(), incremental).await;
+ Ok((t.elapsed(), r))
}