palpo_data/user/
profile.rs1use 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 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 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}