Skip to content

Commit 77e4c41

Browse files
authored
fix(teams): accept username in edit member endpoint (#5852)
* fix(teams): accept username in edit member endpoint * fix: remove unused import * fix: use context to wrap error * refactor: use context for error handling in edit_team_member * fix: remove unused import * fix: wrap database errors as internall errors * fix: properly wrap errors
1 parent cb93c64 commit 77e4c41

2 files changed

Lines changed: 19 additions & 17 deletions

File tree

apps/labrinth/src/routes/v2/teams.rs

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -296,7 +296,7 @@ pub struct EditTeamMember {
296296
#[patch("/{id}/members/{user_id}")]
297297
pub async fn edit_team_member(
298298
req: HttpRequest,
299-
info: web::Path<(TeamId, UserId)>,
299+
info: web::Path<(TeamId, String)>,
300300
pool: web::Data<PgPool>,
301301
edit_member: web::Json<EditTeamMember>,
302302
redis: web::Data<RedisPool>,

apps/labrinth/src/routes/v3/teams.rs

Lines changed: 18 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,9 @@ use crate::models::pats::Scopes;
1212
use crate::models::teams::{OrganizationPermissions, ProjectPermissions};
1313
use crate::queue::session::AuthQueue;
1414
use crate::routes::ApiError;
15+
use crate::util::error::Context;
1516
use actix_web::{HttpRequest, HttpResponse, get, web};
1617
use ariadne::ids::UserId;
17-
use eyre::eyre;
1818
use rust_decimal::Decimal;
1919
use serde::{Deserialize, Serialize};
2020

@@ -689,15 +689,20 @@ pub struct EditTeamMember {
689689

690690
pub async fn edit_team_member(
691691
req: HttpRequest,
692-
info: web::Path<(TeamId, UserId)>,
692+
info: web::Path<(TeamId, String)>,
693693
pool: web::Data<PgPool>,
694694
edit_member: web::Json<EditTeamMember>,
695695
redis: web::Data<RedisPool>,
696696
session_queue: web::Data<AuthQueue>,
697697
) -> Result<HttpResponse, ApiError> {
698698
let ids = info.into_inner();
699699
let id = ids.0.into();
700-
let user_id = ids.1.into();
700+
701+
let user_id = DBUser::get(&ids.1, &**pool, &redis)
702+
.await
703+
.wrap_internal_err("failed to fetch the specified user")?
704+
.wrap_request_err("the specified user does not exist")?
705+
.id;
701706

702707
let current_user = get_user_from_headers(
703708
&req,
@@ -709,24 +714,21 @@ pub async fn edit_team_member(
709714
.await?
710715
.1;
711716

712-
let team_association =
713-
DBTeam::get_association(id, &**pool).await?.ok_or_else(|| {
714-
ApiError::InvalidInput(
715-
"The team specified does not exist".to_string(),
716-
)
717-
})?;
717+
let team_association = DBTeam::get_association(id, &**pool)
718+
.await
719+
.wrap_internal_err("failed to fetch the specified team")?
720+
.wrap_request_err("the specified team does not exist")?;
718721
let member =
719722
DBTeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
720723
.await?;
721724
let edit_member_db =
722725
DBTeamMember::get_from_user_id_pending(id, user_id, &**pool)
723-
.await?
724-
.ok_or_else(|| {
725-
ApiError::Request(eyre!(
726-
"This member does not exist in this team - \
727-
the member must first be created via `POST`"
728-
))
729-
})?;
726+
.await
727+
.wrap_internal_err("failed to fetch team member")?
728+
.wrap_request_err(
729+
"this member does not exist in this team - \
730+
the member must first be created via `POST`",
731+
)?;
730732

731733
let mut transaction = pool.begin().await?;
732734

0 commit comments

Comments
 (0)