diff --git a/src/api/v1/auth/logout.rs b/src/api/v1/auth/logout.rs index 0f265bb..d801ad7 100644 --- a/src/api/v1/auth/logout.rs +++ b/src/api/v1/auth/logout.rs @@ -8,7 +8,7 @@ use crate::{ schema::refresh_tokens::{self, dsl}, }; -/// `GET /api/v1/logout` +/// `GET /api/v1/logout` /// /// requires auth: kinda, needs refresh token set but no access token is technically required /// @@ -18,10 +18,11 @@ use crate::{ /// 401 Unauthorized (no refresh token found) /// #[post("/logout")] -pub async fn res(req: HttpRequest, data: web::Data) -> Result { - let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized( - "request has no refresh token".to_string(), - ))?; +pub async fn res( + req: HttpRequest, + data: web::Data, +) -> Result { + let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized("request has no refresh token".to_string()))?; let refresh_token = String::from(refresh_token_cookie.value()); diff --git a/src/api/v1/auth/refresh.rs b/src/api/v1/auth/refresh.rs index 63e150e..69bf248 100644 --- a/src/api/v1/auth/refresh.rs +++ b/src/api/v1/auth/refresh.rs @@ -18,9 +18,7 @@ use super::Response; #[post("/refresh")] pub async fn res(req: HttpRequest, data: web::Data) -> Result { - let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized( - "request has no refresh token".to_string(), - ))?; + let mut refresh_token_cookie = req.cookie("refresh_token").ok_or(Error::Unauthorized("request has no refresh token".to_string()))?; let mut refresh_token = String::from(refresh_token_cookie.value()); diff --git a/src/api/v1/me/guilds.rs b/src/api/v1/me/guilds.rs index 7fe02bd..06c3328 100644 --- a/src/api/v1/me/guilds.rs +++ b/src/api/v1/me/guilds.rs @@ -18,39 +18,16 @@ use crate::{ /// ``` /// json!([ /// { -/// "uuid": "383d2afa-082f-4dd3-9050-ca6ed91487b6", -/// "name": "My new server!", -/// "description": null, -/// "icon": null, -/// "owner_uuid": "155d2291-fb23-46bd-a656-ae7c5d8218e6", -/// "roles": [], -/// "member_count": 1 +/// "uuid": "22006503-fb01-46e6-8e0e-70336dac6c63", +/// "nickname": "This field is nullable", +/// "user_uuid": "522bca17-de63-4706-9d18-0971867ad1e0", +/// "guild_uuid": "0911e468-3e9e-47bf-8381-59b30e8b68a8" /// }, /// { -/// "uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", -/// "name": "My first server!", -/// "description": "This is a cool and nullable description!", -/// "icon": "https://nullable-url/path/to/icon.png", -/// "owner_uuid": "155d2291-fb23-46bd-a656-ae7c5d8218e6", -/// "roles": [ -/// { -/// "uuid": "be0e4da4-cf73-4f45-98f8-bb1c73d1ab8b", -/// "guild_uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", -/// "name": "Cool people", -/// "color": 15650773, -/// "is_above": c7432f1c-f4ad-4ad3-8216-51388b6abb5b, -/// "permissions": 0 -/// } -/// { -/// "uuid": "c7432f1c-f4ad-4ad3-8216-51388b6abb5b", -/// "guild_uuid": "5ba61ec7-5f97-43e1-89a5-d4693c155612", -/// "name": "Equally cool people", -/// "color": 16777215, -/// "is_above": null, -/// "permissions": 0 -/// } -/// ], -/// "member_count": 20 +/// "uuid": "bf95361e-3b64-4704-969c-3c5a80d10514", +/// "nickname": null, +/// "user_uuid": "522bca17-de63-4706-9d18-0971867ad1e0", +/// "guild_uuid": "69ec2ce5-3d8b-4451-b644-c2d969905458" /// } /// ]); /// ``` @@ -69,7 +46,7 @@ pub async fn get(req: HttpRequest, data: web::Data) -> Result Result, Error> { + pub async fn fetch_memberships(&self, data: &Data) -> Result, Error> { + let mut conn = data.pool.get().await?; + use guild_members::dsl; - let memberships: Vec = dsl::guild_members + let member_builders: Vec = dsl::guild_members .filter(dsl::user_uuid.eq(self.uuid)) .select(MemberBuilder::as_select()) - .load(conn) + .load(&mut conn) .await?; - let mut guilds: Vec = vec![]; + let user = User::fetch_one(data, self.uuid).await?; - for membership in memberships { - use guilds::dsl; - guilds.push( - dsl::guilds - .filter(dsl::uuid.eq(membership.guild_uuid)) - .select(GuildBuilder::as_select()) - .get_result(conn) - .await? - .build(conn) - .await?, - ) - } + let memberships = member_builders + .iter() + .map(|m| Member { + uuid: m.uuid, + nickname: m.nickname.clone(), + user_uuid: m.user_uuid, + guild_uuid: m.guild_uuid, + user: user.clone(), + }) + .collect(); - Ok(guilds) + Ok(memberships) } pub async fn set_avatar( diff --git a/src/utils.rs b/src/utils.rs index 1621ddf..f393bf5 100644 --- a/src/utils.rs +++ b/src/utils.rs @@ -16,11 +16,7 @@ use serde::Serialize; use uuid::Uuid; use crate::{ - Conn, Data, - config::Config, - error::Error, - schema::users, - structs::{HasIsAbove, HasUuid}, + config::Config, error::Error, schema::users, structs::{HasIsAbove, HasUuid}, Conn, Data }; pub static EMAIL_REGEX: LazyLock = LazyLock::new(|| {