gitdataai/lib/channel/http/handler/user.rs

36 lines
1.1 KiB
Rust

use uuid::Uuid;
use crate::{ChannelBus, ChannelError, ChannelResult};
use super::WsHandler;
use super::WsOutEvent;
impl WsHandler {
pub(super) async fn user_summary(
bus: &ChannelBus,
username: String,
) -> ChannelResult<Option<WsOutEvent>> {
let user = db::sqlx::query_as::<_, model::users::UserModel>(
"SELECT id, username, display_name, avatar_url, website_url, \
allow_use, can_search, last_sign_in_at, created_at, updated_at \
FROM \"user\" WHERE username = $1",
)
.bind(&username)
.fetch_one(bus.inner.db.reader())
.await
.map_err(|e| match e {
db::sqlx::Error::RowNotFound => ChannelError::RoomNotFound,
other => ChannelError::Database(other),
})?;
Ok(Some(WsOutEvent::Response {
request_id: Uuid::nil(),
data: serde_json::json!({
"id": user.id,
"username": user.username,
"display_name": user.display_name,
"avatar_url": user.avatar_url,
}),
}))
}
}