From e864d2653d50ba1c920776aaa14a1625c9fc9da4 Mon Sep 17 00:00:00 2001 From: Tolmachev Igor Date: Wed, 22 Oct 2025 17:00:28 +0300 Subject: Add invite tokens --- src/util.rs | 51 +++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 51 insertions(+) create mode 100644 src/util.rs (limited to 'src/util.rs') diff --git a/src/util.rs b/src/util.rs new file mode 100644 index 0000000..1d93085 --- /dev/null +++ b/src/util.rs @@ -0,0 +1,51 @@ +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) +} -- cgit v1.2.3