use entity::{invite_tokens, queues, users}; use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter}; use crate::{ApiError, ClientError}; pub async fn user_exists(id: i64, db: &DatabaseConnection) -> Result { Ok(users::Entity::find_by_id(id).one(db).await?.is_some()) } pub async fn username_exists(username: &str, db: &DatabaseConnection) -> Result { Ok(users::Entity::find() .filter(users::Column::Username.eq(username)) .one(db) .await? .is_some()) } pub async fn get_owned_queue( id: i64, owner_id: i64, db: &DatabaseConnection, ) -> Result { let queue = queues::Entity::find_by_id(id) .one(db) .await? .ok_or(ClientError::QueueNotFound { id })?; if queue.owner_id != owner_id { return Err(ClientError::NotQueueOwner { id: queue.id }.into()); } Ok(queue) } pub async fn get_owned_invite_token( id: i64, owner_id: i64, db: &DatabaseConnection, ) -> Result { let (invite_token, queue) = invite_tokens::Entity::find_by_id(id) .find_also_related(queues::Entity) .one(db) .await? .ok_or(ClientError::InviteTokenNotFound { id })?; if queue.unwrap().owner_id != owner_id { return Err(ClientError::NoInviteTokenAccess { id }.into()); } Ok(invite_token) }