58 lines
2.4 KiB
Rust
58 lines
2.4 KiB
Rust
use crate::service::RoomService;
|
|
use models::agents::model as ai_model;
|
|
use models::rooms::room_message;
|
|
use models::users::user as user_model;
|
|
use sea_orm::{ColumnTrait, EntityTrait, QueryFilter};
|
|
use uuid::Uuid;
|
|
|
|
impl RoomService {
|
|
pub async fn resolve_display_name(
|
|
&self,
|
|
msg: room_message::Model,
|
|
_room_id: Uuid,
|
|
) -> super::RoomMessageResponse {
|
|
let sender_type = msg.sender_type.to_string();
|
|
let display_name = match sender_type.as_str() {
|
|
"ai" => {
|
|
if let Some(mid) = msg.model_id {
|
|
ai_model::Entity::find_by_id(mid)
|
|
.one(&self.db)
|
|
.await
|
|
.inspect_err(|e| tracing::warn!(error = %e, model_id = %mid, "resolve_display_name: AI model lookup failed"))
|
|
.ok()
|
|
.flatten()
|
|
.map(|m| m.name)
|
|
.or_else(|| Some(format!("AI({})", &mid.to_string()[..8])))
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
_ => {
|
|
if let Some(sender_id) = msg.sender_id {
|
|
let user = user_model::Entity::find()
|
|
.filter(user_model::Column::Uid.eq(sender_id))
|
|
.one(&self.db)
|
|
.await
|
|
.inspect_err(|e| tracing::warn!(error = %e, user_id = %sender_id, "resolve_display_name: user lookup failed"))
|
|
.ok()
|
|
.flatten();
|
|
user.map(|u| u.display_name.unwrap_or_else(|| u.username))
|
|
} else {
|
|
None
|
|
}
|
|
}
|
|
};
|
|
|
|
let chunked = super::RoomMessageResponse::detect_chunked(&msg.thinking_content);
|
|
super::RoomMessageResponse {
|
|
id: msg.id, seq: msg.seq, room: msg.room, sender_type,
|
|
sender_id: msg.sender_id, display_name, thread: msg.thread,
|
|
content: msg.content, content_type: msg.content_type.to_string(),
|
|
thinking_content: msg.thinking_content, thinking_is_chunked: chunked,
|
|
edited_at: msg.edited_at, send_at: msg.send_at, revoked: msg.revoked,
|
|
revoked_by: msg.revoked_by, in_reply_to: msg.in_reply_to,
|
|
highlighted_content: None, attachment_ids: Vec::new(), reactions: Vec::new(),
|
|
}
|
|
}
|
|
}
|