Fixed a bug where it was possible to add the same user multiple times to a team
This commit is contained in:
parent
9c451daf30
commit
80e9021ba6
3 changed files with 26 additions and 0 deletions
|
@ -450,3 +450,19 @@ func IsErrTeamAlreadyHasAccess(err error) bool {
|
|||
func (err ErrTeamAlreadyHasAccess) Error() string {
|
||||
return fmt.Sprintf("This team already has access. [Team ID: %d, ID: %d]", err.TeamID, err.ID)
|
||||
}
|
||||
|
||||
// ErrUserIsMemberOfTeam represents an error where a user is already member of a team.
|
||||
type ErrUserIsMemberOfTeam struct {
|
||||
TeamID int64
|
||||
UserID int64
|
||||
}
|
||||
|
||||
// IsErrUserIsMemberOfTeam checks if an error is ErrUserIsMemberOfTeam.
|
||||
func IsErrUserIsMemberOfTeam(err error) bool {
|
||||
_, ok := err.(ErrUserIsMemberOfTeam)
|
||||
return ok
|
||||
}
|
||||
|
||||
func (err ErrUserIsMemberOfTeam) Error() string {
|
||||
return fmt.Sprintf("This user is already a member of that team. [Team ID: %d, User ID: %d]", err.TeamID, err.UserID)
|
||||
}
|
|
@ -14,6 +14,13 @@ func (tm *TeamMember) Create(doer *User) (err error) {
|
|||
return
|
||||
}
|
||||
|
||||
// Check if that user is already part of the team
|
||||
exists, err := x.Where("team_id = ? AND user_id = ?", tm.TeamID, tm.UserID).
|
||||
Get(&TeamMember{})
|
||||
if exists {
|
||||
return ErrUserIsMemberOfTeam{tm.TeamID, tm.UserID}
|
||||
}
|
||||
|
||||
// Insert the user
|
||||
_, err = x.Insert(tm)
|
||||
return
|
||||
|
|
|
@ -56,6 +56,9 @@ func (c *WebHandler) CreateWeb(ctx echo.Context) error {
|
|||
if models.IsErrTeamAlreadyHasAccess(err) {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "This team already has access.")
|
||||
}
|
||||
if models.IsErrUserIsMemberOfTeam(err) {
|
||||
return echo.NewHTTPError(http.StatusBadRequest, "This user is already a member of that team.")
|
||||
}
|
||||
|
||||
return echo.NewHTTPError(http.StatusInternalServerError)
|
||||
}
|
||||
|
|
Loading…
Reference in a new issue