use serde::{Deserialize, Serialize}; use session::Session; use crate::{AppService, error::AppError}; #[derive(Deserialize, Serialize, Clone, Debug, utoipa::ToSchema)] pub struct ContextMe { pub id: uuid::Uuid, pub username: String, pub display_name: Option, pub avatar_url: Option, pub has_unread_notifications: u64, pub language: String, pub timezone: String, } impl AppService { pub async fn auth_me(&self, ctx: Session) -> Result { let user_id = ctx.user().ok_or(AppError::Unauthorized)?; let user = self.auth_find_user_by_uid(user_id).await?; let unread = self.unread_notifications_count(user_id).await.unwrap_or(0); Ok(ContextMe { id: user.id, username: user.username, display_name: if user.display_name.is_empty() { None } else { Some(user.display_name) }, avatar_url: if user.avatar_url.is_empty() { None } else { Some(user.avatar_url) }, has_unread_notifications: unread as u64, language: "en".to_string(), timezone: "UTC".to_string(), }) } }