diff --git a/models/error.go b/models/error.go index 794f9f7..203858d 100644 --- a/models/error.go +++ b/models/error.go @@ -36,3 +36,18 @@ func IsErrNoUsername(err error) bool { func (err ErrNoUsername) Error() string { return fmt.Sprintf("you need to specify a username [user id: %d]", err.UserID) } + +// ErrUserDoesNotExist represents a "UsernameAlreadyExists" kind of error. +type ErrUserDoesNotExist struct { + UserID int64 +} + +// IsErrNoUsername checks if an error is a ErrUsernameExists. +func IsErrUserDoesNotExist(err error) bool { + _, ok := err.(ErrUserDoesNotExist) + return ok +} + +func (err ErrUserDoesNotExist) Error() string { + return fmt.Sprintf("this user does not exist [user id: %d]", err.UserID) +} diff --git a/models/user.go b/models/user.go index b282775..83a325d 100644 --- a/models/user.go +++ b/models/user.go @@ -68,7 +68,7 @@ func CheckUserCredentials(u *UserLogin) (User, error) { } if !exists { - return User{}, fmt.Errorf("user does not exist") + return User{}, ErrUserDoesNotExist{} } // Check the users password diff --git a/models/user_add_update.go b/models/user_add_update.go index 6a898fb..be66de2 100644 --- a/models/user_add_update.go +++ b/models/user_add_update.go @@ -57,6 +57,10 @@ func UpdateUser(user User) (updatedUser User, err error) { // Check if it exists theUser, exists, err := GetUserByID(user.ID) + if err != nil { + return User{}, err + } + if exists { user.Password = theUser.Password // set the password to the one in the database to not accedently resetting it @@ -66,9 +70,16 @@ func UpdateUser(user User) (updatedUser User, err error) { if err != nil { return User{}, err } + + // Get the newly updated user + updatedUser, _, err = GetUserByID(user.ID) + if err != nil { + return User{}, err + } + return updatedUser, nil } - return User{}, fmt.Errorf("This user does not exist") + return User{}, ErrUserDoesNotExist{user.ID} } // UpdateUserPassword updates the password of a user diff --git a/routes/api/v1/user_show.go b/routes/api/v1/user_show.go new file mode 100644 index 0000000..d952216 --- /dev/null +++ b/routes/api/v1/user_show.go @@ -0,0 +1,36 @@ +package v1 + +import ( + "github.com/labstack/echo" + "net/http" + "strconv" + "git.mowie.cc/konrad/Library/models" +) + +func UserShow(c echo.Context) error { + user := c.Param("id") + + if user == "" { + return c.JSON(http.StatusBadRequest, models.Message{"User ID cannot be empty."}) + } + + // Make int + userID, err := strconv.ParseInt(user, 10, 64) + if err != nil { + return c.JSON(http.StatusInternalServerError, models.Message{"Error getting user infos."}) + } + + // Get User Infos + userInfos, exists, err := models.GetUserByID(userID) + + if err != nil { + return c.JSON(http.StatusInternalServerError, models.Message{"Error getting user infos."}) + } + + // Check if it exists + if !exists { + return c.JSON(http.StatusNotFound, models.Message{"User not found."}) + } + + return c.JSON(http.StatusOK, userInfos) +} \ No newline at end of file