Skip to main content

revolt_database/models/sessions/
ops.rs

1use iso8601_timestamp::Timestamp;
2use revolt_result::Result;
3
4use crate::Session;
5
6#[cfg(feature = "mongodb")]
7mod mongodb;
8mod reference;
9
10#[async_trait]
11pub trait AbstractSessions: Sync + Send {
12    /// Find session by id
13    async fn fetch_session(&self, id: &str) -> Result<Session>;
14
15    /// Find sessions by user id
16    async fn fetch_sessions(&self, user_id: &str) -> Result<Vec<Session>>;
17
18    /// Find sessions by user ids
19    async fn fetch_sessions_with_subscription(&self, user_ids: &[String]) -> Result<Vec<Session>>;
20
21    /// Find session by token
22    async fn fetch_session_by_token(&self, token: &str) -> Result<Session>;
23
24    /// Save session
25    async fn save_session(&self, session: &Session) -> Result<()>;
26
27    /// Delete session
28    async fn delete_session(&self, id: &str) -> Result<()>;
29
30    /// Delete session
31    async fn delete_all_sessions(&self, user_id: &str, ignore: Option<String>) -> Result<()>;
32
33    /// Remove push subscription for a session by session id
34    async fn remove_push_subscription_by_session_id(&self, session_id: &str) -> Result<()>;
35
36    async fn update_session_last_seen(&self, session_id: &str, when: Timestamp) -> Result<()>;
37}