diff --git a/svc/pkg/team/ops/member-relationship-get/src/lib.rs b/svc/pkg/team/ops/member-relationship-get/src/lib.rs index 1f4028cbac..2d0cccafa6 100644 --- a/svc/pkg/team/ops/member-relationship-get/src/lib.rs +++ b/svc/pkg/team/ops/member-relationship-get/src/lib.rs @@ -10,7 +10,7 @@ async fn handle( .users .iter() .map(|x| -> GlobalResult<(Uuid, Uuid)> { - Ok(( + Ok(util::sort::id_pair( unwrap_ref!(x.this_user_id).as_uuid(), unwrap_ref!(x.other_user_id).as_uuid(), )) @@ -19,9 +19,11 @@ async fn handle( // Query relationships let relationships = sql_fetch_all!( - [ctx, (Vec,)] + [ctx, (Uuid, Uuid, Vec,)] " SELECT + (q->>0)::UUID AS this_user_id, + (q->>1)::UUID AS other_user_id, ARRAY( SELECT this_tm.team_id FROM db_team.team_members AS this_tm @@ -35,16 +37,17 @@ async fn handle( .await?; let users = relationships - .iter() - .map( - |(team_ids,)| team::member_relationship_get::response::User { + .into_iter() + .map(|(this_user_id, other_user_id, team_ids)| { + team::member_relationship_get::response::User { + this_user_id: Some(this_user_id.into()), + other_user_id: Some(other_user_id.into()), shared_team_ids: team_ids - .iter() - .cloned() + .into_iter() .map(Into::::into) .collect(), - }, - ) + } + }) .collect(); Ok(team::member_relationship_get::Response { users }) diff --git a/svc/pkg/team/ops/member-relationship-get/tests/integration.rs b/svc/pkg/team/ops/member-relationship-get/tests/integration.rs index 39ccdce094..795ea8efce 100644 --- a/svc/pkg/team/ops/member-relationship-get/tests/integration.rs +++ b/svc/pkg/team/ops/member-relationship-get/tests/integration.rs @@ -49,9 +49,9 @@ async fn basic(ctx: TestCtx) { .flat_map(|&this_user| { all_user_ids .iter() - .map(move |&other_user| (this_user, other_user)) + .map(move |&other_user| util::sort::id_pair(this_user, other_user)) }) - .collect::>(); + .collect::>(); let test_users = tests .iter() .map( @@ -67,28 +67,30 @@ async fn basic(ctx: TestCtx) { .await .unwrap(); - res.users - .iter() - .zip(tests.iter()) - .for_each(|(relationship, &(this_user, other_user))| { - let res_shared_team_ids = relationship - .shared_team_ids - .iter() - .map(|x| x.as_uuid()) - .collect::>(); + assert_eq!(tests.len(), res.users.len()); - let this_team_ids = memberships - .iter() - .filter(|m| m.0 == this_user) - .map(|m| m.1) - .collect::>(); - let shared_team_ids = memberships - .iter() - .filter(|m| m.0 == other_user) - .filter(|m| this_team_ids.contains(&m.1)) - .map(|m| m.1) - .collect::>(); + res.users.iter().for_each(|relationship| { + let this_user_id = relationship.this_user_id.unwrap().as_uuid(); + let other_user_id = relationship.other_user_id.unwrap().as_uuid(); + + let res_shared_team_ids = relationship + .shared_team_ids + .iter() + .map(|x| x.as_uuid()) + .collect::>(); + + let this_team_ids = memberships + .iter() + .filter(|m| m.0 == this_user_id) + .map(|m| m.1) + .collect::>(); + let shared_team_ids = memberships + .iter() + .filter(|m| m.0 == other_user_id) + .filter(|m| this_team_ids.contains(&m.1)) + .map(|m| m.1) + .collect::>(); - assert_eq!(shared_team_ids, res_shared_team_ids, "bad shared team ids"); - }); + assert_eq!(shared_team_ids, res_shared_team_ids, "bad shared team ids"); + }); } diff --git a/svc/pkg/team/types/member-relationship-get.proto b/svc/pkg/team/types/member-relationship-get.proto index e1e0f6b798..853887d5f4 100644 --- a/svc/pkg/team/types/member-relationship-get.proto +++ b/svc/pkg/team/types/member-relationship-get.proto @@ -15,6 +15,8 @@ message Request { message Response { message User { + rivet.common.Uuid this_user_id = 2; + rivet.common.Uuid other_user_id = 3; repeated rivet.common.Uuid shared_team_ids = 1; }