From 8a06db53513ac7208750c37b727c6d60fc364279 Mon Sep 17 00:00:00 2001 From: konrad Date: Mon, 16 Jul 2018 08:18:15 +0200 Subject: [PATCH] Implemented team delete method --- models/teams_delete.go | 32 ++++++++++++++++++++++++++++++++ models/teams_rights.go | 15 +++++++++++++++ routes/crud/delete.go | 4 ++++ 3 files changed, 51 insertions(+) create mode 100644 models/teams_delete.go diff --git a/models/teams_delete.go b/models/teams_delete.go new file mode 100644 index 00000000000..6dabb5ca88b --- /dev/null +++ b/models/teams_delete.go @@ -0,0 +1,32 @@ +package models + +func (t *Team) Delete(id int64) (err error) { + + // Check if the team exists + _, err = GetTeamByID(id) + if err != nil { + return + } + + // Delete the team + _, err = x.ID(id).Delete(&Team{}) + if err != nil { + return + } + + // Delete team members + _, err = x.Where("team_id = ?", id).Delete(&TeamMember{}) + if err != nil { + return + } + + // Delete team <-> namespace relations + _, err = x.Where("team_id = ?", id).Delete(&TeamNamespace{}) + if err != nil { + return + } + + // Delete team <-> lists relations + _, err = x.Where("team_id = ?", id).Delete(&TeamList{}) + return +} diff --git a/models/teams_rights.go b/models/teams_rights.go index 0cbb6210012..a9f58ccaba1 100644 --- a/models/teams_rights.go +++ b/models/teams_rights.go @@ -17,3 +17,18 @@ func (t *Team) CanUpdate(user *User, id int64) bool { return exists } + +// CanDelete +func (t *Team) CanDelete(user *User, id int64) bool { + t.ID = id + return t.IsAdmin(user) +} + +// IsAdmin +func (t *Team) IsAdmin(user *User) bool { + exists, _ := x.Where("team_id = ?", t.ID). + And("user_id = ?", user.ID). + And("is_admin = ?", true). + Get(&TeamMember{}) + return exists +} \ No newline at end of file diff --git a/routes/crud/delete.go b/routes/crud/delete.go index 6d8df178ef4..bda12ed9232 100644 --- a/routes/crud/delete.go +++ b/routes/crud/delete.go @@ -33,6 +33,10 @@ func (c *WebHandler) DeleteWeb(ctx echo.Context) error { return echo.NewHTTPError(http.StatusNotFound, "This list does not exist.") } + if models.IsErrTeamDoesNotExist(err) { + return echo.NewHTTPError(http.StatusNotFound, "This team does not exist.") + } + return echo.NewHTTPError(http.StatusInternalServerError) }