Skip to content

Commit 96d9fa0

Browse files
committed
revert query
Signed-off-by: Javier Rodriguez <javier@chainloop.dev>
1 parent a76fb2d commit 96d9fa0

3 files changed

Lines changed: 23 additions & 48 deletions

File tree

app/controlplane/cmd/wire_gen.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/pkg/biz/testhelpers/wire_gen.go

Lines changed: 2 additions & 2 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

app/controlplane/pkg/data/membership.go

Lines changed: 19 additions & 44 deletions
Original file line numberDiff line numberDiff line change
@@ -34,16 +34,14 @@ import (
3434
)
3535

3636
type MembershipRepo struct {
37-
data *Data
38-
log *log.Helper
39-
groupRepo biz.GroupRepo
37+
data *Data
38+
log *log.Helper
4039
}
4140

42-
func NewMembershipRepo(data *Data, groupRepo biz.GroupRepo, logger log.Logger) biz.MembershipRepo {
41+
func NewMembershipRepo(data *Data, logger log.Logger) biz.MembershipRepo {
4342
return &MembershipRepo{
44-
data: data,
45-
groupRepo: groupRepo,
46-
log: log.NewHelper(logger),
43+
data: data,
44+
log: log.NewHelper(logger),
4745
}
4846
}
4947

@@ -255,10 +253,7 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
255253
return fmt.Errorf("failed to get membership: %w", err)
256254
}
257255

258-
// Prepare a slice to hold group IDs that need to be updated
259-
var groupIDs []uuid.UUID
260-
261-
if trErr := WithTx(ctx, r.data.DB, func(tx *ent.Tx) error {
256+
return WithTx(ctx, r.data.DB, func(tx *ent.Tx) error {
262257
// Delete the specific membership
263258
if err := tx.Membership.DeleteOneID(id).Exec(ctx); err != nil {
264259
return fmt.Errorf("failed to delete membership: %w", err)
@@ -284,21 +279,6 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
284279
// Remove the user from all groups in the organization by soft-deleting group memberships
285280
now := time.Now()
286281

287-
// Find all group IDs where this user is a member in this organization
288-
groupMemberships, grpMemErr := tx.GroupMembership.Query().Where(
289-
groupmembership.UserID(userID),
290-
groupmembership.DeletedAtIsNil(),
291-
groupmembership.HasGroupWith(group.OrganizationID(orgID)),
292-
).Select(groupmembership.FieldGroupID).All(ctx)
293-
if grpMemErr != nil {
294-
return fmt.Errorf("failed to fetch group IDs for user %s in organization %s: %w", userID, orgID, err)
295-
}
296-
297-
// Collect group IDs to update member counts later
298-
for _, gm := range groupMemberships {
299-
groupIDs = append(groupIDs, gm.GroupID)
300-
}
301-
302282
// Soft delete all group memberships for this user in this organization
303283
if _, err := tx.GroupMembership.Update().Where(
304284
groupmembership.UserID(userID),
@@ -307,27 +287,22 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
307287
).SetDeletedAt(now).SetUpdatedAt(now).Save(ctx); err != nil {
308288
return fmt.Errorf("failed to delete group memberships for user %s in organization %s: %w", userID, orgID, err)
309289
}
310-
}
311290

312-
return nil
313-
}); trErr != nil {
314-
return trErr
315-
}
316-
317-
// For each affected group, update the member count based on actual query
318-
updated := map[uuid.UUID]struct{}{}
319-
for _, gid := range groupIDs {
320-
if _, seen := updated[gid]; seen {
321-
// deduplicate group IDs
322-
continue
323-
}
324-
updated[gid] = struct{}{}
325-
if err := r.groupRepo.UpdateGroupMemberCount(ctx, gid); err != nil {
326-
return fmt.Errorf("failed to update group member count for group %s: %w", gid, err)
291+
// Decrement the member count of each group this user was a member of
292+
// Only decrement if member_count > 0 to avoid negative values
293+
if _, err := tx.Group.Update().
294+
Where(
295+
group.HasGroupUsersWith(groupmembership.UserID(userID), groupmembership.DeletedAtIsNil()),
296+
group.HasOrganizationWith(organization.ID(orgID)),
297+
group.MemberCountGT(0),
298+
).
299+
AddMemberCount(-1).Save(ctx); err != nil {
300+
return fmt.Errorf("failed to decrement group member count: %w", err)
301+
}
327302
}
328-
}
329303

330-
return nil
304+
return nil
305+
})
331306
}
332307

333308
// RBAC methods

0 commit comments

Comments
 (0)