MCPcopy Create free account
hub / github.com/chainloop-dev/chainloop / RemoveMemberFromGroup

Method RemoveMemberFromGroup

app/controlplane/pkg/data/group.go:532–593  ·  view source on GitHub ↗

RemoveMemberFromGroup removes a user from a group.

(ctx context.Context, orgID uuid.UUID, groupID uuid.UUID, userID uuid.UUID)

Source from the content-addressed store, hash-verified

530
531// RemoveMemberFromGroup removes a user from a group.
532func (g GroupRepo) RemoveMemberFromGroup(ctx context.Context, orgID uuid.UUID, groupID uuid.UUID, userID uuid.UUID) error {
533 ctx, span := otelx.Start(ctx, groupRepoTracer, "GroupRepo.RemoveMemberFromGroup")
534 defer span.End()
535
536 err := WithTx(ctx, g.data.DB, func(tx *ent.Tx) error {
537 // Check if the user is a member of this group
538 existingMembership, err := tx.GroupMembership.Query().
539 Where(groupmembership.UserIDEQ(userID), groupmembership.GroupIDEQ(groupID), groupmembership.DeletedAtIsNil()).
540 Only(ctx)
541 if err != nil {
542 if ent.IsNotFound(err) {
543 return biz.NewErrNotFound("group membership")
544 }
545 return fmt.Errorf("failed to check existing group membership: %w", err)
546 }
547
548 now := time.Now()
549
550 // Mark the membership as deleted
551 _, err = tx.GroupMembership.UpdateOne(existingMembership).
552 SetDeletedAt(now).
553 SetUpdatedAt(now).
554 Save(ctx)
555 if err != nil {
556 return fmt.Errorf("failed to remove user from group: %w", err)
557 }
558
559 // Update the group's updated_at timestamp
560 if _, err := tx.Group.UpdateOneID(groupID).
561 SetUpdatedAt(now).
562 Save(ctx); err != nil {
563 return fmt.Errorf("failed to update group timestamp: %w", err)
564 }
565
566 if existingMembership.Maintainer {
567 // Also remove the user membership if it exists
568 if _, err := tx.Membership.Delete().Where(
569 membership.MemberID(userID),
570 membership.ResourceID(groupID),
571 membership.ResourceTypeEQ(authz.ResourceTypeGroup),
572 membership.HasOrganizationWith(
573 organization.ID(orgID),
574 ),
575 ).Exec(ctx); err != nil {
576 return fmt.Errorf("failed to remove user from group: %w", err)
577 }
578 }
579
580 return nil
581 })
582
583 if err != nil {
584 return err
585 }
586
587 // Update the member count based on actual query after transaction
588 if err := g.UpdateGroupMemberCount(ctx, groupID); err != nil {
589 g.log.Warnf("failed to update member count after removing member from group %s: %v", groupID, err)

Callers

nothing calls this directly

Implementers 1

GroupRepoapp/controlplane/pkg/data/group.go

Calls 15

StartFunction · 0.92
UserIDEQFunction · 0.92
GroupIDEQFunction · 0.92
DeletedAtIsNilFunction · 0.92
IsNotFoundFunction · 0.92
NewErrNotFoundFunction · 0.92
MemberIDFunction · 0.92
ResourceIDFunction · 0.92
ResourceTypeEQFunction · 0.92
HasOrganizationWithFunction · 0.92
IDFunction · 0.92

Tested by

no test coverage detected