gitdataai/libs/agent/compact/auth_fetch.rs

40 lines
1.4 KiB
Rust

use crate::AgentError;
use models::Expr;
use models::rooms::room_message::{
Column as RmCol, Entity as RoomMessage, Model as RoomMessageModel,
};
use sea_orm::*;
impl super::CompactService {
pub async fn fetch_room_messages_secure(
&self,
room_id: uuid::Uuid,
requester_id: uuid::Uuid,
) -> Result<Vec<RoomMessageModel>, AgentError> {
use models::rooms::{RoomAccess, RoomUserState};
RoomMessage::find()
.filter(RmCol::Room.eq(room_id))
.filter(
Condition::any()
.add(Expr::exists(
RoomUserState::find()
.filter(models::rooms::room_user_state::Column::Room.eq(room_id))
.filter(models::rooms::room_user_state::Column::User.eq(requester_id))
.into_query(),
))
.add(Expr::exists(
RoomAccess::find()
.filter(models::rooms::room_access::Column::Room.eq(room_id))
.filter(models::rooms::room_access::Column::User.eq(requester_id))
.into_query(),
)),
)
.order_by_asc(RmCol::Seq)
.limit(10000)
.all(&self.db)
.await
.map_err(|e| AgentError::Internal(e.to_string()))
}
}