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 @@
-
+
-
+