forked from lavina/lavina
31 lines
933 B
Rust
31 lines
933 B
Rust
use anyhow::Result;
|
|
|
|
use crate::repo::Storage;
|
|
use crate::room::RoomId;
|
|
|
|
impl Storage {
|
|
pub async fn retrieve_user_id_by_name(&self, name: &str) -> Result<Option<u32>> {
|
|
let mut executor = self.conn.lock().await;
|
|
let res: Option<(u32,)> = sqlx::query_as("select u.id from users u where u.name = ?;")
|
|
.bind(name)
|
|
.fetch_optional(&mut *executor)
|
|
.await?;
|
|
|
|
Ok(res.map(|(id,)| id))
|
|
}
|
|
|
|
pub async fn get_rooms_of_a_user(&self, user_id: u32) -> Result<Vec<RoomId>> {
|
|
let mut executor = self.conn.lock().await;
|
|
let res: Vec<(String,)> = sqlx::query_as(
|
|
"select r.name
|
|
from memberships m inner join rooms r on m.room_id = r.id
|
|
where m.user_id = ?;",
|
|
)
|
|
.bind(user_id)
|
|
.fetch_all(&mut *executor)
|
|
.await?;
|
|
|
|
res.into_iter().map(|(room_id,)| RoomId::from(room_id)).collect()
|
|
}
|
|
}
|