diff --git a/src/utils/perm.rs b/src/utils/perm.rs new file mode 100644 index 0000000..080d32b --- /dev/null +++ b/src/utils/perm.rs @@ -0,0 +1,23 @@ +use sqlx::{ + PgPool, + query_scalar, +}; + +pub async fn is_whitelist(db: &PgPool, user_id: &str, guild_id: &str) -> Result { + let result: Option = query_scalar( + "SELECT TRUE FROM guild_users gu \ + LEFT JOIN users u ON u.user_id = gu.user_id \ + WHERE gu.user_id = $1 AND gu.guild_id = $2 \ + AND ( \ + gu.is_wl_user = true \ + OR COALESCE(u.is_owner, false) = true \ + OR COALESCE(u.is_buyer, false) = true \ + OR COALESCE(u.is_dev, false) = true \ + )", + ) + .bind(user_id) + .bind(guild_id) + .fetch_optional(db) + .await?; + Ok(result.is_some()) +}