aboutsummaryrefslogtreecommitdiff
path: root/src/util.rs
diff options
context:
space:
mode:
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}