diff options
Diffstat (limited to '')
-rw-r--r-- | src/database/friends.rs | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/src/database/friends.rs b/src/database/friends.rs index 31434d4..7e23616 100644 --- a/src/database/friends.rs +++ b/src/database/friends.rs @@ -75,6 +75,50 @@ impl Database { } #[instrument(skip(self))] + pub fn get_followers(&self, user_id: u64) -> Result<Vec<User>, rusqlite::Error> { + tracing::trace!("Retrieving friends"); + let mut stmt = self.0.prepare( + " + SELECT * + FROM users u + WHERE EXISTS ( + SELECT NULL + FROM friends f + WHERE f.follower_id = ? + AND u.user_id = f.followee_id + ) + ", + )?; + let row = stmt.query_map([user_id], |row| { + let row = Self::user_from_row(row, true)?; + Ok(row) + })?; + Ok(row.into_iter().flatten().collect()) + } + + #[instrument(skip(self))] + pub fn get_following(&self, user_id: u64) -> Result<Vec<User>, rusqlite::Error> { + tracing::trace!("Retrieving friends"); + let mut stmt = self.0.prepare( + " + SELECT * + FROM users u + WHERE EXISTS ( + SELECT NULL + FROM friends f + WHERE u.user_id = f.follower_id + AND f.followee_id = ? + ) + ", + )?; + let row = stmt.query_map([user_id], |row| { + let row = Self::user_from_row(row, true)?; + Ok(row) + })?; + Ok(row.into_iter().flatten().collect()) + } + + #[instrument(skip(self))] pub fn set_following(&self, user_id_1: u64, user_id_2: u64) -> Result<bool, rusqlite::Error> { tracing::trace!("Setting following"); let mut stmt = self |