(e Engine, orgID, teamID, uid int64)
| 580 | } |
| 581 | |
| 582 | func removeTeamMember(e Engine, orgID, teamID, uid int64) error { |
| 583 | if !isTeamMember(e, orgID, teamID, uid) { |
| 584 | return nil |
| 585 | } |
| 586 | |
| 587 | // Get team and its repositories. |
| 588 | t, err := getTeamByID(e, teamID) |
| 589 | if err != nil { |
| 590 | return err |
| 591 | } |
| 592 | |
| 593 | // Check if the user to delete is the last member in owner team. |
| 594 | if t.IsOwnerTeam() && t.NumMembers == 1 { |
| 595 | return ErrLastOrgOwner{UID: uid} |
| 596 | } |
| 597 | |
| 598 | t.NumMembers-- |
| 599 | |
| 600 | if err = t.getRepositories(e); err != nil { |
| 601 | return err |
| 602 | } |
| 603 | |
| 604 | // Get organization. |
| 605 | org, err := getUserByID(e, orgID) |
| 606 | if err != nil { |
| 607 | return err |
| 608 | } |
| 609 | |
| 610 | tu := &TeamUser{ |
| 611 | UID: uid, |
| 612 | OrgID: orgID, |
| 613 | TeamID: teamID, |
| 614 | } |
| 615 | if _, err := e.Delete(tu); err != nil { |
| 616 | return err |
| 617 | } else if _, err = e.ID(t.ID).AllCols().Update(t); err != nil { |
| 618 | return err |
| 619 | } |
| 620 | |
| 621 | // Delete access to team repositories. |
| 622 | for _, repo := range t.Repos { |
| 623 | if err = repo.recalculateTeamAccesses(e, 0); err != nil { |
| 624 | return err |
| 625 | } |
| 626 | } |
| 627 | |
| 628 | // This must exist. |
| 629 | ou := new(OrgUser) |
| 630 | _, err = e.Where("uid = ?", uid).And("org_id = ?", org.ID).Get(ou) |
| 631 | if err != nil { |
| 632 | return err |
| 633 | } |
| 634 | ou.NumTeams-- |
| 635 | if t.IsOwnerTeam() { |
| 636 | ou.IsOwner = false |
| 637 | } |
| 638 | if _, err = e.ID(ou.ID).AllCols().Update(ou); err != nil { |
| 639 | return err |
no test coverage detected