aboutsummaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
authorTolmachev Igor <me@igorek.dev>2025-10-22 17:00:28 +0300
committerTolmachev Igor <me@igorek.dev>2025-10-22 17:00:28 +0300
commite864d2653d50ba1c920776aaa14a1625c9fc9da4 (patch)
tree4e4089d3fc249f9b4a64a9866b48a0e1f5de844b /src/util.rs
parent67ed4e6bb82ac2645f9b7a014a8d635d7b80e821 (diff)
downloadqueue_server-e864d2653d50ba1c920776aaa14a1625c9fc9da4.tar.gz
queue_server-e864d2653d50ba1c920776aaa14a1625c9fc9da4.zip
Add invite tokens
Diffstat (limited to 'src/util.rs')
-rw-r--r--src/util.rs51
1 files changed, 51 insertions, 0 deletions
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 @@
1use entity::{invite_tokens, queues, users};
2use sea_orm::{ColumnTrait, DatabaseConnection, EntityTrait, QueryFilter};
3
4use crate::{ApiError, ClientError};
5
6pub async fn user_exists(id: i64, db: &DatabaseConnection) -> Result<bool, ApiError> {
7 Ok(users::Entity::find_by_id(id).one(db).await?.is_some())
8}
9
10pub async fn username_exists(username: &str, db: &DatabaseConnection) -> Result<bool, ApiError> {
11 Ok(users::Entity::find()
12 .filter(users::Column::Username.eq(username))
13 .one(db)
14 .await?
15 .is_some())
16}
17
18pub async fn get_owned_queue(
19 id: i64,
20 owner_id: i64,
21 db: &DatabaseConnection,
22) -> Result<queues::Model, ApiError> {
23 let queue = queues::Entity::find_by_id(id)
24 .one(db)
25 .await?
26 .ok_or(ClientError::QueueNotFound { id })?;
27
28 if queue.owner_id != owner_id {
29 return Err(ClientError::NotQueueOwner { id: queue.id }.into());
30 }
31
32 Ok(queue)
33}
34
35pub async fn get_owned_invite_token(
36 id: i64,
37 owner_id: i64,
38 db: &DatabaseConnection,
39) -> Result<invite_tokens::Model, ApiError> {
40 let (invite_token, queue) = invite_tokens::Entity::find_by_id(id)
41 .find_also_related(queues::Entity)
42 .one(db)
43 .await?
44 .ok_or(ClientError::InviteTokenNotFound { id })?;
45
46 if queue.unwrap().owner_id != owner_id {
47 return Err(ClientError::NoInviteTokenAccess { id }.into());
48 }
49
50 Ok(invite_token)
51}