feat: add /guilds/{uuid}members

Also makes it return user object with the query
This commit is contained in:
Radical 2025-05-30 21:12:07 +02:00
parent 746285e0fb
commit c9a3e8c6c4
13 changed files with 141 additions and 42 deletions

View file

@ -64,7 +64,7 @@ pub async fn get(
let channel = Channel::fetch_one(&data, channel_uuid).await?;
Member::fetch_one(&mut conn, uuid, channel.guild_uuid).await?;
Member::check_membership(&mut conn, uuid, channel.guild_uuid).await?;
let messages = channel
.fetch_messages(&data, message_request.amount, message_request.offset)

View file

@ -27,7 +27,7 @@ pub async fn get(
let channel = Channel::fetch_one(&data, channel_uuid).await?;
Member::fetch_one(&mut conn, uuid, channel.guild_uuid).await?;
Member::check_membership(&mut conn, uuid, channel.guild_uuid).await?;
Ok(HttpResponse::Ok().json(channel))
}
@ -52,7 +52,7 @@ pub async fn delete(
let channel = Channel::fetch_one(&data, channel_uuid).await?;
Member::fetch_one(&mut conn, uuid, channel.guild_uuid).await?;
Member::check_membership(&mut conn, uuid, channel.guild_uuid).await?;
channel.delete(&data).await?;

View file

@ -36,8 +36,7 @@ pub async fn ws(
let channel = Channel::fetch_one(&data, channel_uuid).await?;
// Get server member from psql
Member::fetch_one(&mut conn, uuid, channel.guild_uuid).await?;
Member::check_membership(&mut conn, uuid, channel.guild_uuid).await?;
let (mut res, mut session_1, stream) = actix_ws::handle(&req, stream)?;

View file

@ -29,7 +29,7 @@ pub async fn get(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
if let Ok(cache_hit) = data.get_cache_key(format!("{}_channels", guild_uuid)).await {
return Ok(HttpResponse::Ok()
@ -70,7 +70,7 @@ pub async fn create(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
// FIXME: Logic to check permissions, should probably be done in utils.rs

View file

@ -32,7 +32,7 @@ pub async fn upload(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
let mut guild = Guild::fetch_one(&mut conn, guild_uuid).await?;

View file

@ -29,7 +29,7 @@ pub async fn get(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
let guild = Guild::fetch_one(&mut conn, guild_uuid).await?;
@ -57,13 +57,13 @@ pub async fn create(
global_checks(&data, uuid).await?;
let member = Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
let guild = Guild::fetch_one(&mut conn, guild_uuid).await?;
let custom_id = invite_request.as_ref().map(|ir| ir.custom_id.clone());
let invite = guild.create_invite(&mut conn, &member, custom_id).await?;
let invite = guild.create_invite(&mut conn, uuid, custom_id).await?;
Ok(HttpResponse::Ok().json(invite))
}

View file

@ -0,0 +1,30 @@
use crate::{
api::v1::auth::check_access_token, error::Error, structs::Member, utils::{get_auth_header, global_checks}, Data
};
use ::uuid::Uuid;
use actix_web::{HttpRequest, HttpResponse, get, web};
#[get("{uuid}/members")]
pub async fn get(
req: HttpRequest,
path: web::Path<(Uuid,)>,
data: web::Data<Data>,
) -> Result<HttpResponse, Error> {
let headers = req.headers();
let auth_header = get_auth_header(headers)?;
let guild_uuid = path.into_inner().0;
let mut conn = data.pool.get().await?;
let uuid = check_access_token(auth_header, &mut conn).await?;
global_checks(&data, uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
let members = Member::fetch_all(&data, guild_uuid).await?;
Ok(HttpResponse::Ok().json(members))
}

View file

@ -7,6 +7,7 @@ mod channels;
mod icon;
mod invites;
mod roles;
mod members;
use crate::{
api::v1::auth::check_access_token, error::Error, structs::{Guild, Member}, utils::{get_auth_header, global_checks}, Data
@ -28,6 +29,8 @@ pub fn web() -> Scope {
.service(invites::create)
// Icon
.service(icon::upload)
// Members
.service(members::get)
}
/// `GET /api/v1/guilds/{uuid}` DESCRIPTION
@ -81,7 +84,7 @@ pub async fn get(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
let guild = Guild::fetch_one(&mut conn, guild_uuid).await?;

View file

@ -29,7 +29,7 @@ pub async fn get(
let uuid = check_access_token(auth_header, &mut conn).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
if let Ok(cache_hit) = data.get_cache_key(format!("{}_roles", guild_uuid)).await {
return Ok(HttpResponse::Ok()
@ -66,7 +66,7 @@ pub async fn create(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
// FIXME: Logic to check permissions, should probably be done in utils.rs

View file

@ -22,7 +22,7 @@ pub async fn get(
global_checks(&data, uuid).await?;
Member::fetch_one(&mut conn, uuid, guild_uuid).await?;
Member::check_membership(&mut conn, uuid, guild_uuid).await?;
if let Ok(cache_hit) = data.get_cache_key(format!("{}", role_uuid)).await {
return Ok(HttpResponse::Ok()

View file

@ -42,7 +42,7 @@ pub async fn join(
let guild = Guild::fetch_one(&mut conn, invite.guild_uuid).await?;
Member::new(&mut conn, uuid, guild.uuid).await?;
Member::new(&data, uuid, guild.uuid).await?;
Ok(HttpResponse::Ok().json(guild))
}

View file

@ -41,7 +41,7 @@ pub async fn get(req: HttpRequest, data: web::Data<Data>) -> Result<HttpResponse
let me = Me::get(&mut conn, uuid).await?;
let memberships = me.fetch_memberships(&mut conn).await?;
let memberships = me.fetch_memberships(&data).await?;
Ok(HttpResponse::Ok().json(memberships))
}