Skip to content

Commit 067082b

Browse files
authored
fix(member merge): API updates for frontend (#96709)
- Use slug instead of org name - Use camel case instead of snake case for parameters - Return serialized merged user in POST request (so we can update query data) - Use set instead of list for orgs, because users whose accounts have been previously merged sometimes have multiple org member objects for the same org. This might just be temporary, but in any case a set is not worse than a list ¯\\\_(ツ)_/¯
1 parent 9519a3c commit 067082b

File tree

2 files changed

+9
-8
lines changed

2 files changed

+9
-8
lines changed

src/sentry/auth_v2/endpoints/auth_merge_user_accounts.py

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,14 @@
77
from sentry.api.base import control_silo_endpoint
88
from sentry.api.paginator import OffsetPaginator
99
from sentry.api.serializers import serialize
10+
from sentry.api.serializers.rest_framework.base import CamelSnakeSerializer
1011
from sentry.auth_v2.endpoints.base import AuthV2Endpoint
1112
from sentry.users.api.serializers.user import UserSerializerWithOrgMemberships
1213
from sentry.users.models.user import User
1314
from sentry.users.models.user_merge_verification_code import UserMergeVerificationCode
1415

1516

16-
class AuthMergeUserAccountsValidator(serializers.Serializer):
17+
class AuthMergeUserAccountsValidator(CamelSnakeSerializer):
1718
verification_code = serializers.CharField(required=True)
1819
ids_to_merge = serializers.ListField(child=serializers.IntegerField(), required=True)
1920
ids_to_delete = serializers.ListField(child=serializers.IntegerField(), required=True)
@@ -104,4 +105,4 @@ def post(self, request: Request) -> Response:
104105
user.merge_to(primary_user)
105106
user.delete()
106107

107-
return Response("Successfully merged user accounts.")
108+
return Response(serialize([primary_user], request.user, UserSerializerWithOrgMemberships()))

src/sentry/users/api/serializers/user.py

Lines changed: 6 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -430,19 +430,19 @@ def get_attrs(
430430
memberships = OrganizationMemberMapping.objects.filter(
431431
user_id__in={u.id for u in item_list}
432432
).values_list("user_id", "organization_id", named=True)
433-
active_org_id_to_name = dict(
433+
active_org_id_to_slug = dict(
434434
OrganizationMapping.objects.filter(
435435
organization_id__in={m.organization_id for m in memberships},
436436
status=OrganizationStatus.ACTIVE,
437-
).values_list("organization_id", "name")
437+
).values_list("organization_id", "slug")
438438
)
439-
active_organization_ids = active_org_id_to_name.keys()
439+
active_organization_ids = active_org_id_to_slug.keys()
440440

441-
user_org_memberships: DefaultDict[int, list[str]] = defaultdict(list)
441+
user_org_memberships: DefaultDict[int, set[str]] = defaultdict(set)
442442
for membership in memberships:
443443
if membership.organization_id in active_organization_ids:
444-
user_org_memberships[membership.user_id].append(
445-
active_org_id_to_name[membership.organization_id]
444+
user_org_memberships[membership.user_id].add(
445+
active_org_id_to_slug[membership.organization_id]
446446
)
447447
for item in item_list:
448448
attrs[item]["organizations"] = user_org_memberships[item.id]

0 commit comments

Comments
 (0)