palpo_data/user/
profile.rs

1use diesel::prelude::*;
2
3use crate::core::identifiers::*;
4use crate::core::OwnedMxcUri;
5use crate::schema::*;
6use crate::{connect, DataResult};
7
8#[derive(Identifiable, Queryable, Debug, Clone)]
9#[diesel(table_name = user_profiles)]
10pub struct DbProfile {
11    pub id: i64,
12    pub user_id: OwnedUserId,
13    // pub server_name: Option<OwnedServerName>,
14    pub room_id: Option<OwnedRoomId>,
15    pub display_name: Option<String>,
16    pub avatar_url: Option<OwnedMxcUri>,
17    pub blurhash: Option<String>,
18}
19
20#[derive(Insertable, Debug, Clone)]
21#[diesel(table_name = user_profiles)]
22pub struct NewDbProfile {
23    pub user_id: OwnedUserId,
24    // pub server_name: Option<OwnedServerName>,
25    pub room_id: Option<OwnedRoomId>,
26    pub display_name: Option<String>,
27    pub avatar_url: Option<OwnedMxcUri>,
28    pub blurhash: Option<String>,
29}
30
31pub fn get_profile(user_id: &UserId, room_id: Option<&RoomId>) -> DataResult<Option<DbProfile>> {
32    let profile = if let Some(room_id) = room_id {
33        user_profiles::table
34            .filter(user_profiles::user_id.eq(user_id.as_str()))
35            .filter(user_profiles::room_id.eq(room_id))
36            .first::<DbProfile>(&mut *connect()?)
37            .optional()?
38    } else {
39        let conn = &mut *connect()?;
40        user_profiles::table
41            .filter(user_profiles::user_id.eq(user_id.as_str()))
42            .filter(user_profiles::room_id.is_null())
43            .first::<DbProfile>(conn)
44            .optional()?
45    };
46    Ok(profile)
47}