@@ -244,8 +244,6 @@ func (r *MembershipRepo) SetRole(ctx context.Context, membershipID uuid.UUID, ro
244244// Delete deletes a membership by ID.
245245// When deleting a membership, it's important to ensure we're not leaving any dangling references.
246246func (r * MembershipRepo ) Delete (ctx context.Context , id uuid.UUID ) error {
247- var membershipToDelete * ent.Membership
248-
249247 // First, fetch the membership to understand what we're deleting
250248 membershipToDelete , err := r .data .DB .Membership .Query ().Where (membership .ID (id )).WithOrganization ().Only (ctx )
251249 if err != nil {
@@ -255,7 +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- err = WithTx (ctx , r .data .DB , func (tx * ent.Tx ) error {
256+ return WithTx (ctx , r .data .DB , func (tx * ent.Tx ) error {
259257 // Delete the specific membership
260258 if err := tx .Membership .DeleteOneID (id ).Exec (ctx ); err != nil {
261259 return fmt .Errorf ("failed to delete membership: %w" , err )
@@ -264,14 +262,12 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
264262 // If this is an organization membership and the member type is a user,
265263 // we also need to clean up any resource memberships for this user in the organization
266264 if membershipToDelete .ResourceType == authz .ResourceTypeOrganization && membershipToDelete .MembershipType == authz .MembershipTypeUser {
267- // Extract the organization id from the membership
265+ // Extract the organization id and user ID from the membership
268266 orgID := membershipToDelete .Edges .Organization .ID
269-
270- // Extract the user ID from the membership
271- // Note: membershipToDelete.MemberID is already the user ID in this case
272267 userID := membershipToDelete .MemberID
273268
274269 // Delete all other resource memberships for this user in the organization
270+ // This will cover all membership types including group-related ones
275271 _ , err := tx .Membership .Delete ().Where (
276272 membership .IDNEQ (id ), // Don't try to delete the one we already deleted
277273 membership .MemberID (userID ),
@@ -305,17 +301,8 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
305301 return fmt .Errorf ("failed to remove user from group: %w" , err )
306302 }
307303
308- if gm .Maintainer {
309- // Also remove the user membership if it exists
310- if _ , err := tx .Membership .Delete ().Where (
311- membership .MemberID (userID ),
312- membership .ResourceTypeEQ (authz .ResourceTypeGroup ),
313- membership .ResourceID (gm .GroupID ),
314- membership .HasOrganizationWith (organization .ID (orgID )),
315- ).Exec (ctx ); err != nil {
316- return fmt .Errorf ("failed to remove user from group: %w" , err )
317- }
318- }
304+ // We don't need to delete the user's membership to this group separately
305+ // since we already deleted all memberships for this user in this organization above
319306
320307 // Decrement the member count of the group
321308 if err := tx .Group .UpdateOneID (gm .GroupID ).
@@ -328,12 +315,6 @@ func (r *MembershipRepo) Delete(ctx context.Context, id uuid.UUID) error {
328315
329316 return nil
330317 })
331-
332- if err != nil {
333- return fmt .Errorf ("failed to delete membership: %w" , err )
334- }
335-
336- return nil
337318}
338319
339320// RBAC methods
0 commit comments