use diesel::prelude::*;
use crate::core::identifiers::*;
use crate::core::OwnedMxcUri;
use crate::schema::*;
use crate::{connect, DataResult};
#[derive(Identifiable, Queryable, Debug, Clone)]
#[diesel(table_name = user_profiles)]
pub struct DbProfile {
pub id: i64,
pub user_id: OwnedUserId,
pub room_id: Option<OwnedRoomId>,
pub display_name: Option<String>,
pub avatar_url: Option<OwnedMxcUri>,
pub blurhash: Option<String>,
}
#[derive(Insertable, Debug, Clone)]
#[diesel(table_name = user_profiles)]
pub struct NewDbProfile {
pub user_id: OwnedUserId,
pub room_id: Option<OwnedRoomId>,
pub display_name: Option<String>,
pub avatar_url: Option<OwnedMxcUri>,
pub blurhash: Option<String>,
}
pub fn get_profile(user_id: &UserId, room_id: Option<&RoomId>) -> DataResult<Option<DbProfile>> {
let profile = if let Some(room_id) = room_id {
user_profiles::table
.filter(user_profiles::user_id.eq(user_id.as_str()))
.filter(user_profiles::room_id.eq(room_id))
.first::<DbProfile>(&mut *connect()?)
.optional()?
} else {
let conn = &mut *connect()?;
user_profiles::table
.filter(user_profiles::user_id.eq(user_id.as_str()))
.filter(user_profiles::room_id.is_null())
.first::<DbProfile>(conn)
.optional()?
};
Ok(profile)
}