Don't delete a user if its the last one
the build failed Details

This commit is contained in:
konrad 2018-01-30 12:22:00 +01:00 committed by kolaente
parent ca88232109
commit 152a399567
Signed by: konrad
GPG Key ID: F40E70337AB24C9B
3 changed files with 31 additions and 1 deletions

View File

@ -94,6 +94,19 @@ func (err ErrCouldNotGetUserID) Error() string {
return fmt.Sprintf("could not get user ID")
}
// ErrCannotDeleteLastUser represents a "ErrCannotDeleteLastUser" kind of error.
type ErrCannotDeleteLastUser struct{}
// IsErrCannotDeleteLastUser checks if an error is a ErrCannotDeleteLastUser.
func IsErrCannotDeleteLastUser(err error) bool {
_, ok := err.(ErrCannotDeleteLastUser)
return ok
}
func (err ErrCannotDeleteLastUser) Error() string {
return fmt.Sprintf("cannot delete last user")
}
// ===================
// Empty things errors
// ===================

View File

@ -1,5 +1,7 @@
package models
import "fmt"
// DeleteUserByID deletes a user by its ID
func DeleteUserByID(id int64) error {
// Check if the id is 0
@ -7,8 +9,18 @@ func DeleteUserByID(id int64) error {
return ErrIDCannotBeZero{}
}
// Check if there is > 1 user
total, err := x.Count(User{})
if err != nil {
return err
}
if total < 2 {
return ErrCannotDeleteLastUser{}
}
// Delete the user
_, err := x.Id(id).Delete(&User{})
_, err = x.Id(id).Delete(&User{})
if err != nil {
return err

View File

@ -42,6 +42,11 @@ func UserDelete(c echo.Context) error {
if models.IsErrIDCannotBeZero(err) {
return c.JSON(http.StatusBadRequest, models.Message{"Id cannot be 0"})
}
if models.IsErrCannotDeleteLastUser(err) {
return c.JSON(http.StatusBadRequest, models.Message{"Cannot delete last user."})
}
return c.JSON(http.StatusInternalServerError, models.Message{"Could not delete user."})
}