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
This commit is contained in:
@@ -296,7 +296,7 @@ pub struct EditTeamMember {
|
|||||||
#[patch("/{id}/members/{user_id}")]
|
#[patch("/{id}/members/{user_id}")]
|
||||||
pub async fn edit_team_member(
|
pub async fn edit_team_member(
|
||||||
req: HttpRequest,
|
req: HttpRequest,
|
||||||
info: web::Path<(TeamId, UserId)>,
|
info: web::Path<(TeamId, String)>,
|
||||||
pool: web::Data<PgPool>,
|
pool: web::Data<PgPool>,
|
||||||
edit_member: web::Json<EditTeamMember>,
|
edit_member: web::Json<EditTeamMember>,
|
||||||
redis: web::Data<RedisPool>,
|
redis: web::Data<RedisPool>,
|
||||||
|
|||||||
@@ -12,9 +12,9 @@ use crate::models::pats::Scopes;
|
|||||||
use crate::models::teams::{OrganizationPermissions, ProjectPermissions};
|
use crate::models::teams::{OrganizationPermissions, ProjectPermissions};
|
||||||
use crate::queue::session::AuthQueue;
|
use crate::queue::session::AuthQueue;
|
||||||
use crate::routes::ApiError;
|
use crate::routes::ApiError;
|
||||||
|
use crate::util::error::Context;
|
||||||
use actix_web::{HttpRequest, HttpResponse, get, web};
|
use actix_web::{HttpRequest, HttpResponse, get, web};
|
||||||
use ariadne::ids::UserId;
|
use ariadne::ids::UserId;
|
||||||
use eyre::eyre;
|
|
||||||
use rust_decimal::Decimal;
|
use rust_decimal::Decimal;
|
||||||
use serde::{Deserialize, Serialize};
|
use serde::{Deserialize, Serialize};
|
||||||
|
|
||||||
@@ -689,7 +689,7 @@ pub struct EditTeamMember {
|
|||||||
|
|
||||||
pub async fn edit_team_member(
|
pub async fn edit_team_member(
|
||||||
req: HttpRequest,
|
req: HttpRequest,
|
||||||
info: web::Path<(TeamId, UserId)>,
|
info: web::Path<(TeamId, String)>,
|
||||||
pool: web::Data<PgPool>,
|
pool: web::Data<PgPool>,
|
||||||
edit_member: web::Json<EditTeamMember>,
|
edit_member: web::Json<EditTeamMember>,
|
||||||
redis: web::Data<RedisPool>,
|
redis: web::Data<RedisPool>,
|
||||||
@@ -697,7 +697,12 @@ pub async fn edit_team_member(
|
|||||||
) -> Result<HttpResponse, ApiError> {
|
) -> Result<HttpResponse, ApiError> {
|
||||||
let ids = info.into_inner();
|
let ids = info.into_inner();
|
||||||
let id = ids.0.into();
|
let id = ids.0.into();
|
||||||
let user_id = ids.1.into();
|
|
||||||
|
let user_id = DBUser::get(&ids.1, &**pool, &redis)
|
||||||
|
.await
|
||||||
|
.wrap_internal_err("failed to fetch the specified user")?
|
||||||
|
.wrap_request_err("the specified user does not exist")?
|
||||||
|
.id;
|
||||||
|
|
||||||
let current_user = get_user_from_headers(
|
let current_user = get_user_from_headers(
|
||||||
&req,
|
&req,
|
||||||
@@ -709,24 +714,21 @@ pub async fn edit_team_member(
|
|||||||
.await?
|
.await?
|
||||||
.1;
|
.1;
|
||||||
|
|
||||||
let team_association =
|
let team_association = DBTeam::get_association(id, &**pool)
|
||||||
DBTeam::get_association(id, &**pool).await?.ok_or_else(|| {
|
.await
|
||||||
ApiError::InvalidInput(
|
.wrap_internal_err("failed to fetch the specified team")?
|
||||||
"The team specified does not exist".to_string(),
|
.wrap_request_err("the specified team does not exist")?;
|
||||||
)
|
|
||||||
})?;
|
|
||||||
let member =
|
let member =
|
||||||
DBTeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
DBTeamMember::get_from_user_id(id, current_user.id.into(), &**pool)
|
||||||
.await?;
|
.await?;
|
||||||
let edit_member_db =
|
let edit_member_db =
|
||||||
DBTeamMember::get_from_user_id_pending(id, user_id, &**pool)
|
DBTeamMember::get_from_user_id_pending(id, user_id, &**pool)
|
||||||
.await?
|
.await
|
||||||
.ok_or_else(|| {
|
.wrap_internal_err("failed to fetch team member")?
|
||||||
ApiError::Request(eyre!(
|
.wrap_request_err(
|
||||||
"This member does not exist in this team - \
|
"this member does not exist in this team - \
|
||||||
the member must first be created via `POST`"
|
the member must first be created via `POST`",
|
||||||
))
|
)?;
|
||||||
})?;
|
|
||||||
|
|
||||||
let mut transaction = pool.begin().await?;
|
let mut transaction = pool.begin().await?;
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user