diff options
Diffstat (limited to 'filamento/src/db.rs')
-rw-r--r-- | filamento/src/db.rs | 26 |
1 files changed, 26 insertions, 0 deletions
diff --git a/filamento/src/db.rs b/filamento/src/db.rs index f92bfb2..c19f16c 100644 --- a/filamento/src/db.rs +++ b/filamento/src/db.rs @@ -1,5 +1,6 @@ use std::{collections::HashSet, path::Path}; +use chrono::Utc; use jid::JID; use sqlx::{SqlitePool, migrate}; use uuid::Uuid; @@ -560,4 +561,29 @@ impl Db { .await?; Ok(()) } + + pub(crate) async fn read_capabilities(&self, node: &str) -> Result<String, Error> { + #[derive(sqlx::FromRow)] + struct Row { + capabilities: String, + } + let row: Row = + sqlx::query_as("select capabilities from capability_hash_nodes where node = ?") + .bind(node) + .fetch_one(&self.db) + .await?; + Ok(row.capabilities) + } + + pub(crate) async fn upsert_capabilities( + &self, + node: &str, + capabilities: &str, + ) -> Result<(), Error> { + let now = Utc::now(); + sqlx::query!( + "insert into capability_hash_nodes (node, timestamp, capabilities) values (?, ?, ?) on conflict do update set timestamp = ?, capabilities = ?", node, now, capabilities, now, capabilities + ).execute(&self.db).await?; + Ok(()) + } } |