Fixed a bug where a struct would have old values in it

This commit is contained in:
konrad 2018-07-14 17:46:01 +02:00 committed by kolaente
parent a5552b8f9d
commit bcbd415529
No known key found for this signature in database
GPG key ID: F40E70337AB24C9B
4 changed files with 8 additions and 20 deletions

View file

@ -7,8 +7,4 @@ type CRUDable interface {
ReadAll(*User) (interface{}, error) ReadAll(*User) (interface{}, error)
Update(int64) error Update(int64) error
Delete(int64) error Delete(int64) error
// This method is needed, because old values would otherwise remain in the struct.
// TODO find a way of not needing an extra function
Empty()
} }

View file

@ -84,15 +84,3 @@ func GetAllTeamsByNamespaceID(id int64) (teams []*Team, err error) {
return return
} }
// Empty empties a struct. Because we heavily use pointers, the old values remain in the struct.
// If you then update by not providing evrything, you have i.e. the old description still in the
// newly created team, but you didn't provided one.
func (t *Team) Empty() {
t.ID = 0
t.CreatedByID = 0
t.CreatedBy = &User{}
t.Name = ""
t.Description = ""
t.Members = []*User{}
}

View file

@ -1,16 +1,17 @@
package crud package crud
import ( import (
"fmt"
"git.kolaente.de/konrad/list/models" "git.kolaente.de/konrad/list/models"
"github.com/labstack/echo" "github.com/labstack/echo"
"net/http" "net/http"
"reflect"
) )
// CreateWeb is the handler to create an object // CreateWeb is the handler to create an object
func (c *WebHandler) CreateWeb(ctx echo.Context) error { func (c *WebHandler) CreateWeb(ctx echo.Context) error {
// Re-initialize our model // Re-initialize our model
c.CObject.Empty() p := reflect.ValueOf(c.CObject).Elem()
p.Set(reflect.Zero(p.Type()))
// Get the object // Get the object
if err := ctx.Bind(&c.CObject); err != nil { if err := ctx.Bind(&c.CObject); err != nil {
@ -57,8 +58,6 @@ func (c *WebHandler) CreateWeb(ctx echo.Context) error {
return echo.NewHTTPError(http.StatusNotFound, "The namespace name cannot be empty.") return echo.NewHTTPError(http.StatusNotFound, "The namespace name cannot be empty.")
} }
fmt.Println(err)
return echo.NewHTTPError(http.StatusInternalServerError) return echo.NewHTTPError(http.StatusInternalServerError)
} }

View file

@ -4,10 +4,15 @@ import (
"git.kolaente.de/konrad/list/models" "git.kolaente.de/konrad/list/models"
"github.com/labstack/echo" "github.com/labstack/echo"
"net/http" "net/http"
"reflect"
) )
// UpdateWeb is the webhandler to update an object // UpdateWeb is the webhandler to update an object
func (c *WebHandler) UpdateWeb(ctx echo.Context) error { func (c *WebHandler) UpdateWeb(ctx echo.Context) error {
// Re-initialize our model
p := reflect.ValueOf(c.CObject).Elem()
p.Set(reflect.Zero(p.Type()))
// Get the object // Get the object
if err := ctx.Bind(&c.CObject); err != nil { if err := ctx.Bind(&c.CObject); err != nil {
return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.") return echo.NewHTTPError(http.StatusBadRequest, "No or invalid model provided.")