From 8da882e2b47b168e5cc753726a6dde40306909a7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Mat=C3=ADas=20Insaurralde?= Date: Fri, 27 Mar 2026 23:21:43 -0300 Subject: [PATCH] fix(data): remove redundant user query in FindByOrg MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Memberships were already loaded with .WithUser(), so the subsequent User.Query() call fetched the same data a second time. Remove the dead code and rely on the eager-loaded edges directly. Signed-off-by: Matías Insaurralde --- .../pkg/biz/membership_integration_test.go | 4 +++ app/controlplane/pkg/data/membership.go | 30 +------------------ 2 files changed, 5 insertions(+), 29 deletions(-) diff --git a/app/controlplane/pkg/biz/membership_integration_test.go b/app/controlplane/pkg/biz/membership_integration_test.go index af32d91da..a63c7d57e 100644 --- a/app/controlplane/pkg/biz/membership_integration_test.go +++ b/app/controlplane/pkg/biz/membership_integration_test.go @@ -54,6 +54,7 @@ func (s *membershipIntegrationTestSuite) TestByOrg() { s.Len(memberships, 1) s.Equal(1, count) s.Equal(memberships[0].OrganizationID.String(), userOrg.ID) + s.NotNil(memberships[0].User) s.Equal(memberships[0].User.Email, user.Email) s.Equal(memberships[0].Role, authz.RoleViewer) }) @@ -63,6 +64,9 @@ func (s *membershipIntegrationTestSuite) TestByOrg() { s.NoError(err) s.Len(memberships, 2) s.Equal(2, count) + for _, m := range memberships { + s.NotNil(m.User) + } }) s.T().Run("non existing org", func(t *testing.T) { diff --git a/app/controlplane/pkg/data/membership.go b/app/controlplane/pkg/data/membership.go index db5f1c3ec..26804c38c 100644 --- a/app/controlplane/pkg/data/membership.go +++ b/app/controlplane/pkg/data/membership.go @@ -155,35 +155,7 @@ func (r *MembershipRepo) FindByOrg(ctx context.Context, orgID uuid.UUID, opts *b return nil, 0, err } - // Fetch all member IDs from the memberships, in this context they are user IDs - memberIDs := make([]uuid.UUID, 0, len(memberships)) - for _, m := range memberships { - memberIDs = append(memberIDs, m.MemberID) - } - - // Fetch user data for all the member IDs - users, err := r.data.DB.User.Query().Where(user.IDIn(memberIDs...)).All(ctx) - if err != nil { - return nil, 0, fmt.Errorf("failed to fetch user data: %w", err) - } - - // Create a map of users by ID - userMap := make(map[uuid.UUID]*ent.User, len(users)) - for _, u := range users { - userMap[u.ID] = u - } - - // Convert to biz.Membership objects and attach user data manually - result := make([]*biz.Membership, 0, len(memberships)) - for _, m := range memberships { - bizMembership := entMembershipToBiz(m) - if u, ok := userMap[m.MemberID]; ok { - bizMembership.User = entUserToBizUser(u) - } - result = append(result, bizMembership) - } - - return result, count, nil + return entMembershipsToBiz(memberships), count, nil } // FindByOrgAndUser finds the membership for a given organization and user