diff --git a/admin/handlers.go b/admin/handlers.go index 3727b47..d7bd286 100644 --- a/admin/handlers.go +++ b/admin/handlers.go @@ -3,8 +3,6 @@ package admin import ( "maps" "strconv" - "fmt" - "reflect" "github.com/gofiber/fiber/v2" "zedshaw.games/webapp/data" . "zedshaw.games/webapp/common" @@ -61,14 +59,16 @@ func GetPageSelectOne(c *fiber.Ctx) error { } func PostApiUpdate(c *fiber.Ctx) error { - user, err := ReceivePost[data.User](c) + table := c.Params("table") + + typeOf := data.Models()[table] + obj, err := ReflectOnPost(typeOf, c) if err != nil { return IfErrNil(err, c) } - fmt.Println("post received", user) - err = Update(c.Params("table"), reflect.ValueOf(user).Elem()) + err = Update(table, obj.Elem()) if err != nil { return IfErrNil(err, c) } - return c.JSON(fiber.Map{"status": "ok"}) + return c.RedirectBack("/admin/table/", 303) } func PutApiInsert(c *fiber.Ctx) error { diff --git a/common/api.go b/common/api.go index 79b8069..9d3f70b 100644 --- a/common/api.go +++ b/common/api.go @@ -2,6 +2,7 @@ package common import ( "log" + "reflect" "github.com/gofiber/fiber/v2" "github.com/go-playground/validator/v10" ) @@ -40,3 +41,26 @@ func ReceivePost[T any](c *fiber.Ctx) (*T, error) { return result, nil } + +func ReflectOnPost(typeOf reflect.Type, c *fiber.Ctx) (reflect.Value, error) { + var result_val reflect.Value + + result_val = reflect.New(typeOf) + result := result_val.Interface() + + if err := c.BodyParser(result); err != nil { + log.Println(err); + return result_val, err + } + + var validate *validator.Validate + validate = validator.New(validator.WithRequiredStructEnabled()) + + if err := validate.Struct(result); err != nil { + validationErrors := err.(validator.ValidationErrors) + log.Println(validationErrors) + return result_val, err + } + + return result_val, nil +} diff --git a/views/admin/table/view.html b/views/admin/table/view.html index 37e3171..6878075 100644 --- a/views/admin/table/view.html +++ b/views/admin/table/view.html @@ -1,17 +1,5 @@ @@ -25,14 +13,14 @@ - +